{"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/CETCalculator.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/CETCalculator.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":273}},"4":{"start":{"line":7,"column":23},"end":{"line":7,"column":63}},"5":{"start":{"line":8,"column":22},"end":{"line":8,"column":53}},"6":{"start":{"line":10,"column":4},"end":{"line":10,"column":37}},"7":{"start":{"line":10,"column":29},"end":{"line":10,"column":35}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":36}},"9":{"start":{"line":14,"column":4},"end":{"line":18,"column":5}},"10":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"11":{"start":{"line":15,"column":8},"end":{"line":17,"column":9}},"12":{"start":{"line":16,"column":12},"end":{"line":16,"column":33}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":14}},"14":{"start":{"line":21,"column":0},"end":{"line":21,"column":30}},"15":{"start":{"line":23,"column":24},"end":{"line":23,"column":27}},"16":{"start":{"line":24,"column":19},"end":{"line":24,"column":21}},"17":{"start":{"line":25,"column":4},"end":{"line":29,"column":5}},"18":{"start":{"line":26,"column":8},"end":{"line":26,"column":58}},"19":{"start":{"line":27,"column":8},"end":{"line":27,"column":53}},"20":{"start":{"line":28,"column":8},"end":{"line":28,"column":20}},"21":{"start":{"line":30,"column":4},"end":{"line":30,"column":28}},"22":{"start":{"line":32,"column":0},"end":{"line":32,"column":30}},"23":{"start":{"line":34,"column":24},"end":{"line":34,"column":57}},"24":{"start":{"line":35,"column":22},"end":{"line":35,"column":53}},"25":{"start":{"line":36,"column":25},"end":{"line":36,"column":27}},"26":{"start":{"line":37,"column":4},"end":{"line":43,"column":5}},"27":{"start":{"line":37,"column":17},"end":{"line":37,"column":18}},"28":{"start":{"line":38,"column":8},"end":{"line":42,"column":18}},"29":{"start":{"line":39,"column":12},"end":{"line":39,"column":46}},"30":{"start":{"line":42,"column":12},"end":{"line":42,"column":18}},"31":{"start":{"line":44,"column":4},"end":{"line":48,"column":6}},"32":{"start":{"line":50,"column":0},"end":{"line":50,"column":40}},"33":{"start":{"line":52,"column":27},"end":{"line":52,"column":55}},"34":{"start":{"line":53,"column":26},"end":{"line":53,"column":84}},"35":{"start":{"line":53,"column":73},"end":{"line":53,"column":83}},"36":{"start":{"line":54,"column":4},"end":{"line":56,"column":5}},"37":{"start":{"line":55,"column":8},"end":{"line":55,"column":21}},"38":{"start":{"line":57,"column":22},"end":{"line":67,"column":6}},"39":{"start":{"line":58,"column":26},"end":{"line":58,"column":56}},"40":{"start":{"line":60,"column":28},"end":{"line":60,"column":46}},"41":{"start":{"line":61,"column":8},"end":{"line":61,"column":58}},"42":{"start":{"line":62,"column":23},"end":{"line":62,"column":25}},"43":{"start":{"line":63,"column":8},"end":{"line":65,"column":9}},"44":{"start":{"line":63,"column":21},"end":{"line":63,"column":26}},"45":{"start":{"line":64,"column":12},"end":{"line":64,"column":57}},"46":{"start":{"line":66,"column":8},"end":{"line":66,"column":22}},"47":{"start":{"line":68,"column":4},"end":{"line":68,"column":68}},"48":{"start":{"line":68,"column":37},"end":{"line":68,"column":41}},"49":{"start":{"line":70,"column":0},"end":{"line":70,"column":40}},"50":{"start":{"line":72,"column":27},"end":{"line":72,"column":55}},"51":{"start":{"line":73,"column":25},"end":{"line":73,"column":90}},"52":{"start":{"line":73,"column":72},"end":{"line":73,"column":89}},"53":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"54":{"start":{"line":75,"column":8},"end":{"line":75,"column":28}},"55":{"start":{"line":77,"column":21},"end":{"line":87,"column":6}},"56":{"start":{"line":78,"column":26},"end":{"line":78,"column":55}},"57":{"start":{"line":80,"column":28},"end":{"line":80,"column":46}},"58":{"start":{"line":81,"column":8},"end":{"line":81,"column":58}},"59":{"start":{"line":82,"column":23},"end":{"line":82,"column":25}},"60":{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},"61":{"start":{"line":83,"column":21},"end":{"line":83,"column":26}},"62":{"start":{"line":84,"column":12},"end":{"line":84,"column":57}},"63":{"start":{"line":86,"column":8},"end":{"line":86,"column":22}},"64":{"start":{"line":88,"column":4},"end":{"line":88,"column":76}},"65":{"start":{"line":88,"column":59},"end":{"line":88,"column":63}},"66":{"start":{"line":90,"column":0},"end":{"line":90,"column":38}},"67":{"start":{"line":92,"column":19},"end":{"line":92,"column":21}},"68":{"start":{"line":93,"column":4},"end":{"line":95,"column":5}},"69":{"start":{"line":94,"column":8},"end":{"line":94,"column":39}},"70":{"start":{"line":96,"column":4},"end":{"line":96,"column":18}},"71":{"start":{"line":98,"column":0},"end":{"line":98,"column":42}},"72":{"start":{"line":100,"column":53},"end":{"line":100,"column":96}},"73":{"start":{"line":101,"column":4},"end":{"line":120,"column":5}},"74":{"start":{"line":102,"column":34},"end":{"line":102,"column":41}},"75":{"start":{"line":103,"column":35},"end":{"line":103,"column":49}},"76":{"start":{"line":105,"column":8},"end":{"line":105,"column":30}},"77":{"start":{"line":107,"column":9},"end":{"line":120,"column":5}},"78":{"start":{"line":108,"column":23},"end":{"line":108,"column":25}},"79":{"start":{"line":109,"column":8},"end":{"line":111,"column":9}},"80":{"start":{"line":109,"column":21},"end":{"line":109,"column":56}},"81":{"start":{"line":110,"column":12},"end":{"line":110,"column":46}},"82":{"start":{"line":112,"column":8},"end":{"line":112,"column":22}},"83":{"start":{"line":115,"column":22},"end":{"line":115,"column":55}},"84":{"start":{"line":116,"column":23},"end":{"line":116,"column":68}},"85":{"start":{"line":117,"column":21},"end":{"line":117,"column":51}},"86":{"start":{"line":118,"column":26},"end":{"line":118,"column":56}},"87":{"start":{"line":119,"column":8},"end":{"line":119,"column":61}},"88":{"start":{"line":119,"column":36},"end":{"line":119,"column":59}},"89":{"start":{"line":122,"column":0},"end":{"line":122,"column":54}},"90":{"start":{"line":147,"column":4},"end":{"line":149,"column":5}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":69}},"92":{"start":{"line":150,"column":30},"end":{"line":150,"column":62}},"93":{"start":{"line":151,"column":34},"end":{"line":159,"column":5}},"94":{"start":{"line":152,"column":30},"end":{"line":152,"column":106}},"95":{"start":{"line":152,"column":72},"end":{"line":152,"column":105}},"96":{"start":{"line":153,"column":8},"end":{"line":158,"column":10}},"97":{"start":{"line":160,"column":18},"end":{"line":160,"column":90}},"98":{"start":{"line":160,"column":27},"end":{"line":160,"column":90}},"99":{"start":{"line":161,"column":30},"end":{"line":161,"column":84}},"100":{"start":{"line":162,"column":20},"end":{"line":162,"column":110}},"101":{"start":{"line":162,"column":29},"end":{"line":162,"column":110}},"102":{"start":{"line":163,"column":19},"end":{"line":163,"column":21}},"103":{"start":{"line":165,"column":4},"end":{"line":169,"column":7}},"104":{"start":{"line":171,"column":4},"end":{"line":185,"column":5}},"105":{"start":{"line":172,"column":8},"end":{"line":176,"column":11}},"106":{"start":{"line":178,"column":8},"end":{"line":182,"column":11}},"107":{"start":{"line":184,"column":8},"end":{"line":184,"column":49}},"108":{"start":{"line":186,"column":25},"end":{"line":186,"column":41}},"109":{"start":{"line":188,"column":4},"end":{"line":256,"column":5}},"110":{"start":{"line":189,"column":42},"end":{"line":189,"column":79}},"111":{"start":{"line":191,"column":41},"end":{"line":191,"column":98}},"112":{"start":{"line":193,"column":28},"end":{"line":193,"column":130}},"113":{"start":{"line":194,"column":39},"end":{"line":194,"column":53}},"114":{"start":{"line":195,"column":28},"end":{"line":197,"column":30}},"115":{"start":{"line":198,"column":8},"end":{"line":255,"column":9}},"116":{"start":{"line":199,"column":38},"end":{"line":201,"column":73}},"117":{"start":{"line":202,"column":44},"end":{"line":202,"column":90}},"118":{"start":{"line":203,"column":41},"end":{"line":203,"column":119}},"119":{"start":{"line":204,"column":40},"end":{"line":204,"column":87}},"120":{"start":{"line":205,"column":12},"end":{"line":210,"column":13}},"121":{"start":{"line":209,"column":16},"end":{"line":209,"column":74}},"122":{"start":{"line":211,"column":32},"end":{"line":211,"column":76}},"123":{"start":{"line":212,"column":12},"end":{"line":220,"column":13}},"124":{"start":{"line":213,"column":16},"end":{"line":217,"column":19}},"125":{"start":{"line":218,"column":16},"end":{"line":218,"column":58}},"126":{"start":{"line":219,"column":16},"end":{"line":219,"column":22}},"127":{"start":{"line":221,"column":12},"end":{"line":246,"column":13}},"128":{"start":{"line":226,"column":16},"end":{"line":243,"column":17}},"129":{"start":{"line":227,"column":20},"end":{"line":231,"column":23}},"130":{"start":{"line":234,"column":20},"end":{"line":242,"column":23}},"131":{"start":{"line":244,"column":16},"end":{"line":244,"column":36}},"132":{"start":{"line":245,"column":16},"end":{"line":245,"column":22}},"133":{"start":{"line":247,"column":12},"end":{"line":251,"column":15}},"134":{"start":{"line":252,"column":12},"end":{"line":252,"column":53}},"135":{"start":{"line":253,"column":12},"end":{"line":253,"column":46}},"136":{"start":{"line":254,"column":12},"end":{"line":254,"column":73}},"137":{"start":{"line":258,"column":4},"end":{"line":262,"column":7}},"138":{"start":{"line":264,"column":4},"end":{"line":264,"column":45}},"139":{"start":{"line":266,"column":0},"end":{"line":266,"column":42}},"140":{"start":{"line":267,"column":21},"end":{"line":280,"column":1}},"141":{"start":{"line":268,"column":4},"end":{"line":279,"column":11}},"142":{"start":{"line":269,"column":21},"end":{"line":269,"column":40}},"143":{"start":{"line":270,"column":8},"end":{"line":277,"column":9}},"144":{"start":{"line":271,"column":12},"end":{"line":276,"column":13}},"145":{"start":{"line":274,"column":16},"end":{"line":274,"column":45}},"146":{"start":{"line":275,"column":16},"end":{"line":275,"column":27}},"147":{"start":{"line":278,"column":8},"end":{"line":278,"column":31}},"148":{"start":{"line":281,"column":0},"end":{"line":281,"column":36}},"149":{"start":{"line":283,"column":23},"end":{"line":283,"column":70}},"150":{"start":{"line":284,"column":16},"end":{"line":286,"column":49}},"151":{"start":{"line":287,"column":26},"end":{"line":289,"column":27}},"152":{"start":{"line":290,"column":4},"end":{"line":290,"column":54}},"153":{"start":{"line":292,"column":0},"end":{"line":292,"column":34}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"zipWithIndex","decl":{"start":{"line":9,"column":9},"end":{"line":9,"column":21}},"loc":{"start":{"line":9,"column":27},"end":{"line":11,"column":1}},"line":9},"2":{"name":"(anonymous_2)","decl":{"start":{"line":10,"column":19},"end":{"line":10,"column":20}},"loc":{"start":{"line":10,"column":29},"end":{"line":10,"column":35}},"line":10},"3":{"name":"dropUntil","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":18}},"loc":{"start":{"line":13,"column":32},"end":{"line":20,"column":1}},"line":13},"4":{"name":"decompose","decl":{"start":{"line":22,"column":9},"end":{"line":22,"column":18}},"loc":{"start":{"line":22,"column":41},"end":{"line":31,"column":1}},"line":22},"5":{"name":"separatePrefix","decl":{"start":{"line":33,"column":9},"end":{"line":33,"column":23}},"loc":{"start":{"line":33,"column":53},"end":{"line":49,"column":1}},"line":33},"6":{"name":"frontGroupings","decl":{"start":{"line":51,"column":9},"end":{"line":51,"column":23}},"loc":{"start":{"line":51,"column":38},"end":{"line":69,"column":1}},"line":51},"7":{"name":"(anonymous_7)","decl":{"start":{"line":53,"column":66},"end":{"line":53,"column":67}},"loc":{"start":{"line":53,"column":73},"end":{"line":53,"column":83}},"line":53},"8":{"name":"(anonymous_8)","decl":{"start":{"line":58,"column":16},"end":{"line":58,"column":17}},"loc":{"start":{"line":58,"column":26},"end":{"line":58,"column":56}},"line":58},"9":{"name":"(anonymous_9)","decl":{"start":{"line":59,"column":17},"end":{"line":59,"column":18}},"loc":{"start":{"line":59,"column":29},"end":{"line":67,"column":5}},"line":59},"10":{"name":"(anonymous_10)","decl":{"start":{"line":68,"column":30},"end":{"line":68,"column":31}},"loc":{"start":{"line":68,"column":37},"end":{"line":68,"column":41}},"line":68},"11":{"name":"backGroupings","decl":{"start":{"line":71,"column":9},"end":{"line":71,"column":22}},"loc":{"start":{"line":71,"column":37},"end":{"line":89,"column":1}},"line":71},"12":{"name":"(anonymous_12)","decl":{"start":{"line":73,"column":65},"end":{"line":73,"column":66}},"loc":{"start":{"line":73,"column":72},"end":{"line":73,"column":89}},"line":73},"13":{"name":"(anonymous_13)","decl":{"start":{"line":78,"column":16},"end":{"line":78,"column":17}},"loc":{"start":{"line":78,"column":26},"end":{"line":78,"column":55}},"line":78},"14":{"name":"(anonymous_14)","decl":{"start":{"line":79,"column":17},"end":{"line":79,"column":18}},"loc":{"start":{"line":79,"column":29},"end":{"line":87,"column":5}},"line":79},"15":{"name":"(anonymous_15)","decl":{"start":{"line":88,"column":52},"end":{"line":88,"column":53}},"loc":{"start":{"line":88,"column":59},"end":{"line":88,"column":63}},"line":88},"16":{"name":"middleGroupings","decl":{"start":{"line":91,"column":9},"end":{"line":91,"column":24}},"loc":{"start":{"line":91,"column":57},"end":{"line":97,"column":1}},"line":91},"17":{"name":"groupByIgnoringDigits","decl":{"start":{"line":99,"column":9},"end":{"line":99,"column":30}},"loc":{"start":{"line":99,"column":60},"end":{"line":121,"column":1}},"line":99},"18":{"name":"(anonymous_18)","decl":{"start":{"line":102,"column":27},"end":{"line":102,"column":28}},"loc":{"start":{"line":102,"column":34},"end":{"line":102,"column":41}},"line":102},"19":{"name":"(anonymous_19)","decl":{"start":{"line":103,"column":28},"end":{"line":103,"column":29}},"loc":{"start":{"line":103,"column":35},"end":{"line":103,"column":49}},"line":103},"20":{"name":"(anonymous_20)","decl":{"start":{"line":119,"column":29},"end":{"line":119,"column":30}},"loc":{"start":{"line":119,"column":36},"end":{"line":119,"column":59}},"line":119},"21":{"name":"splitIntoRanges","decl":{"start":{"line":144,"column":9},"end":{"line":144,"column":24}},"loc":{"start":{"line":146,"column":43},"end":{"line":265,"column":1}},"line":146},"22":{"name":"(anonymous_22)","decl":{"start":{"line":151,"column":34},"end":{"line":151,"column":35}},"loc":{"start":{"line":151,"column":47},"end":{"line":159,"column":5}},"line":151},"23":{"name":"(anonymous_23)","decl":{"start":{"line":152,"column":58},"end":{"line":152,"column":59}},"loc":{"start":{"line":152,"column":72},"end":{"line":152,"column":105}},"line":152},"24":{"name":"(anonymous_24)","decl":{"start":{"line":160,"column":18},"end":{"line":160,"column":19}},"loc":{"start":{"line":160,"column":27},"end":{"line":160,"column":90}},"line":160},"25":{"name":"(anonymous_25)","decl":{"start":{"line":162,"column":20},"end":{"line":162,"column":21}},"loc":{"start":{"line":162,"column":29},"end":{"line":162,"column":110}},"line":162},"26":{"name":"(anonymous_26)","decl":{"start":{"line":267,"column":21},"end":{"line":267,"column":22}},"loc":{"start":{"line":267,"column":34},"end":{"line":280,"column":1}},"line":267},"27":{"name":"(anonymous_27)","decl":{"start":{"line":268,"column":26},"end":{"line":268,"column":27}},"loc":{"start":{"line":268,"column":42},"end":{"line":279,"column":5}},"line":268},"28":{"name":"roundPayout","decl":{"start":{"line":282,"column":9},"end":{"line":282,"column":20}},"loc":{"start":{"line":282,"column":39},"end":{"line":291,"column":1}},"line":282}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":15,"column":8},"end":{"line":17,"column":9}},"type":"if","locations":[{"start":{"line":15,"column":8},"end":{"line":17,"column":9}},{"start":{"line":15,"column":8},"end":{"line":17,"column":9}}],"line":15},"4":{"loc":{"start":{"line":38,"column":8},"end":{"line":42,"column":18}},"type":"if","locations":[{"start":{"line":38,"column":8},"end":{"line":42,"column":18}},{"start":{"line":38,"column":8},"end":{"line":42,"column":18}}],"line":38},"5":{"loc":{"start":{"line":54,"column":4},"end":{"line":56,"column":5}},"type":"if","locations":[{"start":{"line":54,"column":4},"end":{"line":56,"column":5}},{"start":{"line":54,"column":4},"end":{"line":56,"column":5}}],"line":54},"6":{"loc":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},{"start":{"line":74,"column":4},"end":{"line":76,"column":5}}],"line":74},"7":{"loc":{"start":{"line":101,"column":4},"end":{"line":120,"column":5}},"type":"if","locations":[{"start":{"line":101,"column":4},"end":{"line":120,"column":5}},{"start":{"line":101,"column":4},"end":{"line":120,"column":5}}],"line":101},"8":{"loc":{"start":{"line":101,"column":8},"end":{"line":104,"column":38}},"type":"binary-expr","locations":[{"start":{"line":101,"column":8},"end":{"line":101,"column":21}},{"start":{"line":102,"column":9},"end":{"line":102,"column":42}},{"start":{"line":103,"column":12},"end":{"line":103,"column":50}},{"start":{"line":104,"column":12},"end":{"line":104,"column":37}}],"line":101},"9":{"loc":{"start":{"line":107,"column":9},"end":{"line":120,"column":5}},"type":"if","locations":[{"start":{"line":107,"column":9},"end":{"line":120,"column":5}},{"start":{"line":107,"column":9},"end":{"line":120,"column":5}}],"line":107},"10":{"loc":{"start":{"line":147,"column":4},"end":{"line":149,"column":5}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":149,"column":5}},{"start":{"line":147,"column":4},"end":{"line":149,"column":5}}],"line":147},"11":{"loc":{"start":{"line":154,"column":12},"end":{"line":156,"column":27}},"type":"cond-expr","locations":[{"start":{"line":155,"column":18},"end":{"line":155,"column":62}},{"start":{"line":156,"column":18},"end":{"line":156,"column":27}}],"line":154},"12":{"loc":{"start":{"line":171,"column":4},"end":{"line":185,"column":5}},"type":"if","locations":[{"start":{"line":171,"column":4},"end":{"line":185,"column":5}},{"start":{"line":171,"column":4},"end":{"line":185,"column":5}}],"line":171},"13":{"loc":{"start":{"line":191,"column":41},"end":{"line":191,"column":98}},"type":"binary-expr","locations":[{"start":{"line":191,"column":41},"end":{"line":191,"column":92}},{"start":{"line":191,"column":96},"end":{"line":191,"column":98}}],"line":191},"14":{"loc":{"start":{"line":201,"column":22},"end":{"line":201,"column":72}},"type":"cond-expr","locations":[{"start":{"line":201,"column":36},"end":{"line":201,"column":52}},{"start":{"line":201,"column":55},"end":{"line":201,"column":72}}],"line":201},"15":{"loc":{"start":{"line":203,"column":60},"end":{"line":203,"column":118}},"type":"cond-expr","locations":[{"start":{"line":203,"column":74},"end":{"line":203,"column":94}},{"start":{"line":203,"column":97},"end":{"line":203,"column":118}}],"line":203},"16":{"loc":{"start":{"line":205,"column":12},"end":{"line":210,"column":13}},"type":"if","locations":[{"start":{"line":205,"column":12},"end":{"line":210,"column":13}},{"start":{"line":205,"column":12},"end":{"line":210,"column":13}}],"line":205},"17":{"loc":{"start":{"line":205,"column":16},"end":{"line":208,"column":85}},"type":"binary-expr","locations":[{"start":{"line":205,"column":17},"end":{"line":205,"column":29}},{"start":{"line":206,"column":16},"end":{"line":206,"column":79}},{"start":{"line":207,"column":17},"end":{"line":207,"column":28}},{"start":{"line":208,"column":20},"end":{"line":208,"column":84}}],"line":205},"18":{"loc":{"start":{"line":212,"column":12},"end":{"line":220,"column":13}},"type":"if","locations":[{"start":{"line":212,"column":12},"end":{"line":220,"column":13}},{"start":{"line":212,"column":12},"end":{"line":220,"column":13}}],"line":212},"19":{"loc":{"start":{"line":221,"column":12},"end":{"line":246,"column":13}},"type":"if","locations":[{"start":{"line":221,"column":12},"end":{"line":246,"column":13}},{"start":{"line":221,"column":12},"end":{"line":246,"column":13}}],"line":221},"20":{"loc":{"start":{"line":221,"column":16},"end":{"line":224,"column":31}},"type":"binary-expr","locations":[{"start":{"line":221,"column":16},"end":{"line":221,"column":57}},{"start":{"line":222,"column":16},"end":{"line":222,"column":43}},{"start":{"line":223,"column":16},"end":{"line":223,"column":33}},{"start":{"line":224,"column":16},"end":{"line":224,"column":31}}],"line":221},"21":{"loc":{"start":{"line":226,"column":16},"end":{"line":243,"column":17}},"type":"if","locations":[{"start":{"line":226,"column":16},"end":{"line":243,"column":17}},{"start":{"line":226,"column":16},"end":{"line":243,"column":17}}],"line":226},"22":{"loc":{"start":{"line":226,"column":20},"end":{"line":226,"column":78}},"type":"binary-expr","locations":[{"start":{"line":226,"column":20},"end":{"line":226,"column":48}},{"start":{"line":226,"column":52},"end":{"line":226,"column":78}}],"line":226},"23":{"loc":{"start":{"line":270,"column":8},"end":{"line":277,"column":9}},"type":"if","locations":[{"start":{"line":270,"column":8},"end":{"line":277,"column":9}},{"start":{"line":270,"column":8},"end":{"line":277,"column":9}}],"line":270},"24":{"loc":{"start":{"line":271,"column":12},"end":{"line":276,"column":13}},"type":"if","locations":[{"start":{"line":271,"column":12},"end":{"line":276,"column":13}},{"start":{"line":271,"column":12},"end":{"line":276,"column":13}}],"line":271},"25":{"loc":{"start":{"line":271,"column":16},"end":{"line":273,"column":44}},"type":"binary-expr","locations":[{"start":{"line":271,"column":17},"end":{"line":271,"column":49}},{"start":{"line":272,"column":16},"end":{"line":272,"column":60}},{"start":{"line":273,"column":16},"end":{"line":273,"column":44}}],"line":271},"26":{"loc":{"start":{"line":284,"column":16},"end":{"line":286,"column":49}},"type":"cond-expr","locations":[{"start":{"line":285,"column":10},"end":{"line":285,"column":32}},{"start":{"line":286,"column":10},"end":{"line":286,"column":49}}],"line":284},"27":{"loc":{"start":{"line":287,"column":26},"end":{"line":289,"column":27}},"type":"cond-expr","locations":[{"start":{"line":288,"column":10},"end":{"line":288,"column":44}},{"start":{"line":289,"column":10},"end":{"line":289,"column":27}}],"line":287}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":18,"7":80,"8":1,"9":18,"10":18,"11":31,"12":16,"13":2,"14":1,"15":29,"16":29,"17":29,"18":141,"19":141,"20":141,"21":29,"22":1,"23":12,"24":12,"25":12,"26":12,"27":12,"28":24,"29":13,"30":11,"31":12,"32":1,"33":9,"34":9,"35":14,"36":9,"37":1,"38":8,"39":34,"40":26,"41":26,"42":26,"43":26,"44":26,"45":58,"46":26,"47":8,"48":34,"49":1,"50":9,"51":9,"52":17,"53":9,"54":1,"55":8,"56":31,"57":23,"58":23,"59":23,"60":23,"61":23,"62":21,"63":23,"64":8,"65":31,"66":1,"67":9,"68":9,"69":17,"70":9,"71":1,"72":12,"73":12,"74":15,"75":4,"76":2,"77":10,"78":1,"79":1,"80":1,"81":8,"82":1,"83":9,"84":9,"85":9,"86":9,"87":9,"88":114,"89":1,"90":18,"91":0,"92":18,"93":18,"94":21,"95":34,"96":21,"97":18,"98":4999,"99":18,"100":18,"101":21,"102":18,"103":18,"104":18,"105":4,"106":4,"107":4,"108":14,"109":14,"110":21,"111":21,"112":21,"113":21,"114":21,"115":21,"116":4985,"117":4985,"118":4985,"119":4985,"120":4985,"121":2472,"122":4985,"123":4985,"124":6,"125":6,"126":6,"127":4979,"128":14,"129":0,"130":14,"131":14,"132":14,"133":4965,"134":4965,"135":4965,"136":4965,"137":14,"138":14,"139":1,"140":1,"141":20,"142":5075,"143":5075,"144":5055,"145":39,"146":39,"147":5036,"148":1,"149":9909,"150":9909,"151":9909,"152":9909,"153":1},"f":{"0":1,"1":18,"2":80,"3":18,"4":29,"5":12,"6":9,"7":14,"8":34,"9":26,"10":34,"11":9,"12":17,"13":31,"14":23,"15":31,"16":9,"17":12,"18":15,"19":4,"20":114,"21":18,"22":21,"23":34,"24":4999,"25":21,"26":20,"27":5075,"28":9909},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1],"3":[16,15],"4":[13,11],"5":[1,8],"6":[1,8],"7":[2,10],"8":[12,11,2,2],"9":[1,9],"10":[0,18],"11":[21,0],"12":[4,14],"13":[21,13],"14":[2253,2732],"15":[2253,2732],"16":[2472,2513],"17":[4985,2732,3665,2253],"18":[6,4979],"19":[14,4965],"20":[4979,4975,4975,4969],"21":[0,14],"22":[14,14],"23":[5055,20],"24":[39,5016],"25":[5055,5043,5054],"26":[9909,0],"27":[4949,4960]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/CETCalculator.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/CETCalculator.ts"],"names":[],"mappings":"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","sourcesContent":["import BigNumber from 'bignumber.js';\n\nimport { BigIntMath, toBigInt } from '../utils/BigIntUtils';\nimport { HyperbolaPayoutCurve } from './HyperbolaPayoutCurve';\nimport { PolynomialPayoutCurve } from './PolynomialPayoutCurve';\n\nexport function zipWithIndex<T>(arr: T[]): [T, number][] {\n  return arr.map((a, i) => [a, i]);\n}\n\nexport function dropUntil<T>(data: T[], check: (_: T) => boolean): T[] {\n  for (let i = 0; i < data.length; i++) {\n    if (check(data[i])) {\n      return data.slice(i);\n    }\n  }\n  return [];\n}\n\nexport function decompose(\n  num: bigint,\n  base: number,\n  numDigits: number,\n): number[] {\n  let currentNumber = num;\n  const digits = [];\n  while (numDigits > 0) {\n    digits.push(Number(currentNumber % BigInt(base)));\n    currentNumber = currentNumber / BigInt(base);\n    numDigits--;\n  }\n  return digits.reverse();\n}\n\nexport function separatePrefix(\n  start: bigint,\n  end: bigint,\n  base: number,\n  numDigits: number,\n): {\n  prefixDigits: number[];\n  startDigits: number[];\n  endDigits: number[];\n} {\n  const startDigits = decompose(start, base, numDigits);\n  const endDigits = decompose(end, base, numDigits);\n\n  const prefixDigits: number[] = [];\n  for (let i = 0; i < startDigits.length; i++) {\n    if (startDigits[i] === endDigits[i]) {\n      prefixDigits.push(startDigits[i]);\n    } else break;\n  }\n\n  return {\n    prefixDigits,\n    startDigits: startDigits.splice(prefixDigits.length),\n    endDigits: endDigits.splice(prefixDigits.length),\n  };\n}\n\nexport function frontGroupings(digits: number[], base: number): number[][] {\n  const digitsReversed = Array.from(digits).reverse();\n  const nonZeroDigits = dropUntil(\n    zipWithIndex(digitsReversed),\n    (a) => a[0] !== 0,\n  );\n\n  if (nonZeroDigits.length === 0) {\n    return [[0]];\n  }\n  const fromFront = nonZeroDigits\n    .filter((_, i) => i !== nonZeroDigits.length - 1)\n    .flatMap(([d, i]) => {\n      const fixedDigits = Array.from(digits);\n      fixedDigits.length = fixedDigits.length - (i + 1);\n\n      const result: number[][] = [];\n      for (let n = d + 1; n < base; n++) {\n        result.push([...Array.from(fixedDigits), n]);\n      }\n      return result;\n    });\n\n  return [nonZeroDigits.map((a) => a[0]).reverse(), ...fromFront];\n}\n\nexport function backGroupings(digits: number[], base: number): number[][] {\n  const digitsReversed = Array.from(digits).reverse();\n  const nonMaxDigits = dropUntil(\n    zipWithIndex(digitsReversed),\n    (a) => a[0] !== base - 1,\n  );\n\n  if (nonMaxDigits.length === 0) {\n    return [[base - 1]];\n  }\n\n  const fromBack = nonMaxDigits\n    .filter((_, i) => i !== nonMaxDigits.length - 1)\n    .flatMap(([d, i]) => {\n      const fixedDigits = Array.from(digits);\n      fixedDigits.length = fixedDigits.length - (i + 1);\n\n      const result: number[][] = [];\n      for (let n = d - 1; n >= 0; n--) {\n        result.push([...Array.from(fixedDigits), n]);\n      }\n\n      return result;\n    });\n\n  return [...fromBack.reverse(), nonMaxDigits.map((a) => a[0]).reverse()];\n}\n\nexport function middleGroupings(\n  firstDigitStart: number,\n  firstDigitEnd: number,\n): number[][] {\n  const result = [];\n  while (++firstDigitStart < firstDigitEnd) {\n    result.push([firstDigitStart]);\n  }\n  return result;\n}\n\nexport function groupByIgnoringDigits(\n  start: bigint,\n  end: bigint,\n  base: number,\n  numDigits: number,\n): number[][] {\n  const { prefixDigits, startDigits, endDigits } = separatePrefix(\n    start,\n    end,\n    base,\n    numDigits,\n  );\n\n  if (\n    start === end ||\n    (startDigits.every((n) => n === 0) &&\n      endDigits.every((n) => n === base - 1) &&\n      prefixDigits.length !== 0)\n  ) {\n    return [prefixDigits];\n  } else if (prefixDigits.length === numDigits - 1) {\n    const result = [];\n    for (\n      let i = startDigits[startDigits.length - 1];\n      i <= endDigits[endDigits.length - 1];\n      i++\n    ) {\n      result.push([...prefixDigits, i]);\n    }\n\n    return result;\n  } else {\n    const front = frontGroupings(startDigits, base);\n    const middle = middleGroupings(startDigits[0], endDigits[0]);\n    const back = backGroupings(endDigits, base);\n\n    const groupings = [...front, ...middle, ...back];\n\n    return groupings.map((g) => [...prefixDigits, ...g]);\n  }\n}\n\nexport interface RoundingInterval {\n  beginInterval: bigint;\n  roundingMod: bigint;\n}\n\nexport type CETPayout = {\n  indexFrom: bigint;\n  indexTo: bigint;\n  payout: bigint;\n};\n\n/**\n * Performs optimized evaluation and rounding for strictly monotonic hyperbolas on intervals (from, to)\n * e.g. hyperbolas with the form b = c = 0\n *\n * The next start of a payout range is determined by finding the outcome at the next mid-rounding payout.\n * Uses an inverse function of the hyperbola to find the outcome.\n *\n * Optimizes rounding from O(to - from) to O(totalCollateral / rounding)\n *\n *\n * Evaluates and rounds a payout_function equivalent to:\n *\n *   payout_function_v0\n *    num_pieces: 1\n *    endpoint_0: from\n *    endpoint_payout_0: fromPayout\n *    extra_precision_0: 0\n *    payout_curve_piece: HyperbolaPayoutCurve\n *    endpoint_1: to\n *    endpoint_payout_1: toPayout\n */\nexport function splitIntoRanges(\n  from: bigint,\n  to: bigint,\n  fromPayout: bigint, // endpoint_payout\n  toPayout: bigint, // endpoint_payout\n  totalCollateral: bigint,\n  curve: HyperbolaPayoutCurve | PolynomialPayoutCurve,\n  roundingIntervals: RoundingInterval[],\n): CETPayout[] {\n  if (to - from <= 0) {\n    throw new Error('`to` must be strictly greater than `from`');\n  }\n\n  const reversedIntervals = [...roundingIntervals].reverse();\n\n  const getRoundingForOutcome = (outcome: bigint): [bigint, number] => {\n    const roundingIndex = reversedIntervals.findIndex(\n      (interval) => interval.beginInterval <= outcome,\n    );\n\n    return [\n      roundingIndex !== -1\n        ? reversedIntervals[roundingIndex].roundingMod\n        : BigInt(1),\n      roundingIndex,\n    ];\n  };\n\n  const clamp = (val: bigint) =>\n    BigIntMath.clamp(BigInt(0), val, totalCollateral);\n\n  const totalCollateralBN = new BigNumber(totalCollateral.toString());\n  const clampBN = (val: BigNumber) =>\n    BigNumber.max(0, BigNumber.min(val, totalCollateralBN));\n\n  const result: CETPayout[] = [];\n\n  // outcome = endpoint_0\n  result.push({\n    payout: fromPayout,\n    indexFrom: from,\n    indexTo: from,\n  });\n\n  // In the case of a constant payout curve (fromPayout === toPayout), we can skip the range evaluation\n  if (fromPayout === toPayout) {\n    result.push({\n      payout: toPayout,\n      indexFrom: from,\n      indexTo: to,\n    });\n    // outcome = endpoint_1\n    result.push({\n      payout: toPayout,\n      indexFrom: to,\n      indexTo: to,\n    });\n    // merge neighbouring ranges with same payout\n    return mergePayouts(result);\n  }\n\n  let currentOutcome = from + BigInt(1);\n\n  // iterate over entire range of outcomes from [from, to]\n  while (currentOutcome < to) {\n    const [rounding, roundingIndex] = getRoundingForOutcome(currentOutcome);\n\n    // either the next rounding interval, or the end of the range\n    const nextFirstRoundingOutcome =\n      reversedIntervals[roundingIndex - 1]?.beginInterval || to;\n\n    // temporary variable to hold the current payout\n    let currentPayout = new BigNumber(\n      roundPayout(\n        clampBN(curve.getPayout(currentOutcome)),\n        rounding,\n      ).toString(),\n    );\n\n    let currentMidRoundedOutcome = currentOutcome;\n\n    const isAscending = curve\n      .getPayout(nextFirstRoundingOutcome)\n      .gt(currentPayout);\n\n    while (currentMidRoundedOutcome < nextFirstRoundingOutcome) {\n      const nextRoundedPayout = currentPayout\n        .integerValue()\n        .plus(isAscending ? Number(rounding) : -Number(rounding));\n\n      const nextRoundedPayoutBigInt = toBigInt(nextRoundedPayout);\n\n      const nextMidRoundedPayout = currentPayout.plus(\n        isAscending ? Number(rounding) / 2 : -Number(rounding) / 2,\n      );\n\n      let nextMidRoundedOutcome = curve.getOutcomeForPayout(\n        nextMidRoundedPayout,\n      );\n\n      if (\n        (!isAscending &&\n          curve.getPayout(nextMidRoundedOutcome).lt(nextMidRoundedPayout)) ||\n        (isAscending &&\n          curve.getPayout(nextMidRoundedOutcome).gte(nextMidRoundedPayout))\n      ) {\n        nextMidRoundedOutcome = nextMidRoundedOutcome - BigInt(1);\n      }\n\n      const nextOutcome = curve.getOutcomeForPayout(nextRoundedPayout);\n\n      if (nextMidRoundedOutcome >= nextFirstRoundingOutcome) {\n        result.push({\n          payout: clamp(toBigInt(currentPayout)),\n          indexFrom: currentMidRoundedOutcome,\n          indexTo: nextFirstRoundingOutcome - BigInt(1),\n        });\n\n        currentOutcome = nextFirstRoundingOutcome;\n        break;\n      }\n\n      if (\n        nextRoundedPayoutBigInt > totalCollateral ||\n        nextRoundedPayoutBigInt < 0 ||\n        nextOutcome >= to ||\n        nextOutcome < 0 // undefined on curve\n      ) {\n        if (nextMidRoundedOutcome < from || nextMidRoundedOutcome > to) {\n          result.push({\n            payout: clamp(toBigInt(currentPayout)),\n            indexFrom: currentMidRoundedOutcome,\n            indexTo: to,\n          });\n        } else {\n          result.push(\n            {\n              payout: clamp(toBigInt(currentPayout)),\n              indexFrom: currentMidRoundedOutcome,\n              indexTo: nextMidRoundedOutcome,\n            },\n            {\n              payout: clamp(nextRoundedPayoutBigInt),\n              indexFrom: nextMidRoundedOutcome + BigInt(1),\n              indexTo: to - BigInt(1),\n            },\n          );\n        }\n\n        currentOutcome = to;\n        break;\n      }\n\n      result.push({\n        payout: clamp(toBigInt(currentPayout)),\n        indexFrom: currentMidRoundedOutcome,\n        indexTo: nextMidRoundedOutcome,\n      });\n\n      currentOutcome = nextOutcome + BigInt(1);\n      currentPayout = nextRoundedPayout;\n\n      currentMidRoundedOutcome = nextMidRoundedOutcome + BigInt(1);\n    }\n  }\n\n  // outcome = endpoint_1\n  result.push({\n    payout: toPayout,\n    indexFrom: to,\n    indexTo: to,\n  });\n\n  // merge neighbouring ranges with same payout\n  return mergePayouts(result);\n}\n\nexport const mergePayouts = (payouts: CETPayout[]): CETPayout[] => {\n  return payouts.reduce((acc: CETPayout[], range) => {\n    const prev = acc[acc.length - 1];\n    if (prev) {\n      if (\n        (prev.indexTo === range.indexFrom ||\n          prev.indexTo + BigInt(1) === range.indexFrom) &&\n        prev.payout === range.payout\n      ) {\n        prev.indexTo = range.indexTo;\n        return acc;\n      }\n    }\n\n    return [...acc, range];\n  }, []);\n};\n\nexport function roundPayout(payout: BigNumber, rounding: bigint): bigint {\n  const roundingBN = new BigNumber(rounding.toString());\n  const mod = payout.gte(0)\n    ? payout.mod(roundingBN)\n    : payout.mod(roundingBN).plus(roundingBN);\n\n  const roundedPayout = mod.gte(roundingBN.dividedBy(2))\n    ? payout.plus(roundingBN).minus(mod)\n    : payout.minus(mod);\n\n  return toBigInt(roundedPayout);\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"16ac62a291cdd091cc86c66325e8457ae1472cce","contentHash":"45ef2b3ca43131ef6708e754dab9173499d47d5934fe3fbbe5b563804ca50761"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/utils/BigIntUtils.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/utils/BigIntUtils.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":47}},"2":{"start":{"line":6,"column":8},"end":{"line":8,"column":9}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":24}},"4":{"start":{"line":9,"column":8},"end":{"line":11,"column":9}},"5":{"start":{"line":10,"column":12},"end":{"line":10,"column":29}},"6":{"start":{"line":12,"column":18},"end":{"line":12,"column":27}},"7":{"start":{"line":13,"column":8},"end":{"line":17,"column":9}},"8":{"start":{"line":13,"column":21},"end":{"line":13,"column":22}},"9":{"start":{"line":14,"column":12},"end":{"line":16,"column":13}},"10":{"start":{"line":15,"column":16},"end":{"line":15,"column":32}},"11":{"start":{"line":18,"column":8},"end":{"line":18,"column":19}},"12":{"start":{"line":21,"column":8},"end":{"line":23,"column":9}},"13":{"start":{"line":22,"column":12},"end":{"line":22,"column":24}},"14":{"start":{"line":24,"column":8},"end":{"line":26,"column":9}},"15":{"start":{"line":25,"column":12},"end":{"line":25,"column":29}},"16":{"start":{"line":27,"column":18},"end":{"line":27,"column":27}},"17":{"start":{"line":28,"column":8},"end":{"line":32,"column":9}},"18":{"start":{"line":28,"column":21},"end":{"line":28,"column":22}},"19":{"start":{"line":29,"column":12},"end":{"line":31,"column":13}},"20":{"start":{"line":30,"column":16},"end":{"line":30,"column":32}},"21":{"start":{"line":33,"column":8},"end":{"line":33,"column":19}},"22":{"start":{"line":36,"column":8},"end":{"line":38,"column":9}},"23":{"start":{"line":37,"column":12},"end":{"line":37,"column":29}},"24":{"start":{"line":39,"column":8},"end":{"line":41,"column":9}},"25":{"start":{"line":40,"column":12},"end":{"line":40,"column":30}},"26":{"start":{"line":42,"column":8},"end":{"line":42,"column":25}},"27":{"start":{"line":45,"column":8},"end":{"line":47,"column":9}},"28":{"start":{"line":46,"column":12},"end":{"line":46,"column":26}},"29":{"start":{"line":48,"column":8},"end":{"line":48,"column":21}},"30":{"start":{"line":51,"column":8},"end":{"line":51,"column":49}},"31":{"start":{"line":54,"column":0},"end":{"line":54,"column":32}},"32":{"start":{"line":56,"column":4},"end":{"line":56,"column":49}},"33":{"start":{"line":58,"column":0},"end":{"line":58,"column":28}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":4},"end":{"line":5,"column":5}},"loc":{"start":{"line":5,"column":26},"end":{"line":19,"column":5}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":20,"column":4},"end":{"line":20,"column":5}},"loc":{"start":{"line":20,"column":26},"end":{"line":34,"column":5}},"line":20},"2":{"name":"(anonymous_2)","decl":{"start":{"line":35,"column":4},"end":{"line":35,"column":5}},"loc":{"start":{"line":35,"column":23},"end":{"line":43,"column":5}},"line":35},"3":{"name":"(anonymous_3)","decl":{"start":{"line":44,"column":4},"end":{"line":44,"column":5}},"loc":{"start":{"line":44,"column":22},"end":{"line":49,"column":5}},"line":44},"4":{"name":"(anonymous_4)","decl":{"start":{"line":50,"column":4},"end":{"line":50,"column":5}},"loc":{"start":{"line":50,"column":32},"end":{"line":52,"column":5}},"line":50},"5":{"name":"toBigInt","decl":{"start":{"line":55,"column":9},"end":{"line":55,"column":17}},"loc":{"start":{"line":55,"column":23},"end":{"line":57,"column":1}},"line":55}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":8},"end":{"line":8,"column":9}},"type":"if","locations":[{"start":{"line":6,"column":8},"end":{"line":8,"column":9}},{"start":{"line":6,"column":8},"end":{"line":8,"column":9}}],"line":6},"1":{"loc":{"start":{"line":9,"column":8},"end":{"line":11,"column":9}},"type":"if","locations":[{"start":{"line":9,"column":8},"end":{"line":11,"column":9}},{"start":{"line":9,"column":8},"end":{"line":11,"column":9}}],"line":9},"2":{"loc":{"start":{"line":14,"column":12},"end":{"line":16,"column":13}},"type":"if","locations":[{"start":{"line":14,"column":12},"end":{"line":16,"column":13}},{"start":{"line":14,"column":12},"end":{"line":16,"column":13}}],"line":14},"3":{"loc":{"start":{"line":21,"column":8},"end":{"line":23,"column":9}},"type":"if","locations":[{"start":{"line":21,"column":8},"end":{"line":23,"column":9}},{"start":{"line":21,"column":8},"end":{"line":23,"column":9}}],"line":21},"4":{"loc":{"start":{"line":24,"column":8},"end":{"line":26,"column":9}},"type":"if","locations":[{"start":{"line":24,"column":8},"end":{"line":26,"column":9}},{"start":{"line":24,"column":8},"end":{"line":26,"column":9}}],"line":24},"5":{"loc":{"start":{"line":29,"column":12},"end":{"line":31,"column":13}},"type":"if","locations":[{"start":{"line":29,"column":12},"end":{"line":31,"column":13}},{"start":{"line":29,"column":12},"end":{"line":31,"column":13}}],"line":29},"6":{"loc":{"start":{"line":36,"column":8},"end":{"line":38,"column":9}},"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":38,"column":9}},{"start":{"line":36,"column":8},"end":{"line":38,"column":9}}],"line":36},"7":{"loc":{"start":{"line":39,"column":8},"end":{"line":41,"column":9}},"type":"if","locations":[{"start":{"line":39,"column":8},"end":{"line":41,"column":9}},{"start":{"line":39,"column":8},"end":{"line":41,"column":9}}],"line":39},"8":{"loc":{"start":{"line":45,"column":8},"end":{"line":47,"column":9}},"type":"if","locations":[{"start":{"line":45,"column":8},"end":{"line":47,"column":9}},{"start":{"line":45,"column":8},"end":{"line":47,"column":9}}],"line":45}},"s":{"0":1,"1":1,"2":14887,"3":0,"4":14887,"5":0,"6":14887,"7":14887,"8":14887,"9":14887,"10":14877,"11":14887,"12":14887,"13":0,"14":14887,"15":0,"16":14887,"17":14887,"18":14887,"19":14887,"20":8,"21":14887,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":14887,"31":1,"32":19887,"33":1},"f":{"0":14887,"1":14887,"2":0,"3":0,"4":14887,"5":19887},"b":{"0":[0,14887],"1":[0,14887],"2":[14877,10],"3":[0,14887],"4":[0,14887],"5":[8,14879],"6":[0,0],"7":[0,0],"8":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/utils/BigIntUtils.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/utils/BigIntUtils.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IACrB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAgB;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC;SACb;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB;QAED,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;gBACnB,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;aACjB;SACF;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,MAAgB;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC;SACb;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB;QAED,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;gBACnB,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;aACjB;SACF;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,KAAa;QACvB,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;YACrB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB;QACD,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;YACrB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SACnB;QACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,KAAa;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YACnC,OAAO,CAAC,KAAK,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;CACF;AAzDD,gCAyDC;AAED,SAAgB,QAAQ,CAAC,GAAc;IACrC,OAAO,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/C,CAAC;AAFD,4BAEC","sourcesContent":["import BigNumber from 'bignumber.js';\n\nexport class BigIntMath {\n  static max(...values: bigint[]): bigint {\n    if (values.length === 0) {\n      return null;\n    }\n\n    if (values.length === 1) {\n      return values[0];\n    }\n\n    let max = values[0];\n    for (let i = 1; i < values.length; i++) {\n      if (values[i] > max) {\n        max = values[i];\n      }\n    }\n    return max;\n  }\n\n  static min(...values: bigint[]): bigint {\n    if (values.length === 0) {\n      return null;\n    }\n\n    if (values.length === 1) {\n      return values[0];\n    }\n\n    let min = values[0];\n    for (let i = 1; i < values.length; i++) {\n      if (values[i] < min) {\n        min = values[i];\n      }\n    }\n    return min;\n  }\n\n  static sign(value: bigint): bigint {\n    if (value > BigInt(0)) {\n      return BigInt(1);\n    }\n    if (value < BigInt(0)) {\n      return BigInt(-1);\n    }\n    return BigInt(0);\n  }\n\n  static abs(value: bigint): bigint {\n    if (this.sign(value) === BigInt(-1)) {\n      return -value;\n    }\n    return value;\n  }\n\n  static clamp(min: bigint, val: bigint, max: bigint): bigint {\n    return this.max(min, this.min(val, max));\n  }\n}\n\nexport function toBigInt(num: BigNumber): bigint {\n  return BigInt(num.integerValue().toString());\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"9edd40c819822c02c3f665c7fd7e5cced4fbc569","contentHash":"9f3f58b3c95e97f9cd76d06508b4dd70cc7170c547c60d8fc07556b2edb45fde"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/CoveredCall.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/CoveredCall.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":29}},"4":{"start":{"line":7,"column":20},"end":{"line":7,"column":50}},"5":{"start":{"line":8,"column":23},"end":{"line":8,"column":63}},"6":{"start":{"line":9,"column":22},"end":{"line":9,"column":56}},"7":{"start":{"line":10,"column":31},"end":{"line":10,"column":65}},"8":{"start":{"line":11,"column":19},"end":{"line":28,"column":1}},"9":{"start":{"line":12,"column":14},"end":{"line":12,"column":43}},"10":{"start":{"line":13,"column":14},"end":{"line":13,"column":43}},"11":{"start":{"line":14,"column":14},"end":{"line":14,"column":43}},"12":{"start":{"line":15,"column":14},"end":{"line":15,"column":81}},"13":{"start":{"line":16,"column":16},"end":{"line":16,"column":45}},"14":{"start":{"line":17,"column":17},"end":{"line":17,"column":46}},"15":{"start":{"line":18,"column":38},"end":{"line":18,"column":108}},"16":{"start":{"line":19,"column":23},"end":{"line":19,"column":109}},"17":{"start":{"line":20,"column":29},"end":{"line":22,"column":23}},"18":{"start":{"line":23,"column":4},"end":{"line":27,"column":6}},"19":{"start":{"line":29,"column":28},"end":{"line":45,"column":1}},"20":{"start":{"line":30,"column":57},"end":{"line":30,"column":120}},"21":{"start":{"line":31,"column":27},"end":{"line":31,"column":61}},"22":{"start":{"line":32,"column":4},"end":{"line":32,"column":41}},"23":{"start":{"line":33,"column":4},"end":{"line":33,"column":53}},"24":{"start":{"line":34,"column":4},"end":{"line":34,"column":39}},"25":{"start":{"line":35,"column":4},"end":{"line":40,"column":7}},"26":{"start":{"line":41,"column":4},"end":{"line":44,"column":6}},"27":{"start":{"line":46,"column":0},"end":{"line":46,"column":58}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":11,"column":19},"end":{"line":11,"column":20}},"loc":{"start":{"line":11,"column":76},"end":{"line":28,"column":1}},"line":11},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":28},"end":{"line":29,"column":29}},"loc":{"start":{"line":29,"column":85},"end":{"line":45,"column":1}},"line":29}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":8,"10":8,"11":8,"12":8,"13":8,"14":8,"15":8,"16":8,"17":8,"18":8,"19":1,"20":3,"21":3,"22":3,"23":3,"24":3,"25":3,"26":3,"27":1},"f":{"0":1,"1":8,"2":3},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/CoveredCall.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/CoveredCall.ts"],"names":[],"mappings":";;;;;;AAAA,mDAAuD;AACvD,gEAA8B;AAE9B,yDAAmD;AACnD,kEAA+D;AAE/D,MAAM,UAAU,GAAG,CACjB,WAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,YAAoB,EAKpB,EAAE;IACF,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE1D,MAAM,GAAG,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IAEvB,MAAM,yBAAyB,GAAG,IAAI,2CAAoB,CACxD,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,EACD,GAAG,EACH,IAAI,CACL,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,CACvB,IAAI,sBAAE,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC3D,CAAC;IACF,MAAM,gBAAgB,GAAG,yBAAyB;SAC/C,SAAS,CAAC,UAAU,CAAC;SACrB,YAAY,EAAE,CAAC;IAElB,OAAO;QACL,UAAU;QACV,eAAe,EAAE,YAAY,GAAG,IAAA,sBAAQ,EAAC,gBAAgB,CAAC;QAC1D,WAAW,EAAE,IAAI,2CAAoB,CACnC,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,EACD,GAAG,EACH,gBAAgB,CAAC,OAAO,EAAE,CAC3B;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,WAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,YAAoB,EAC2C,EAAE;IACjE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,UAAU,CAC7D,WAAW,EACX,YAAY,EACZ,UAAU,EACV,YAAY,CACb,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,4BAAgB,EAAE,CAAC;IAC9C,cAAc,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrC,cAAc,CAAC,eAAe,GAAG,eAAe,CAAC;IACjD,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;IAEnC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,gBAAgB,EAAE,WAAW,CAAC,kBAAkB,EAAE;QAClD,QAAQ,EAAE,UAAU;QACpB,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QACzB,cAAc,EAAE,CAAC;KAClB,CAAC,CAAC;IAEH,OAAO;QACL,cAAc;QACd,eAAe;KAChB,CAAC;AACJ,CAAC,CAAC;AAEW,QAAA,WAAW,GAAG,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { PayoutFunctionV0 } from '@node-dlc/messaging';\nimport BN from 'bignumber.js';\n\nimport { toBigInt } from '../../utils/BigIntUtils';\nimport { HyperbolaPayoutCurve } from '../HyperbolaPayoutCurve';\n\nconst buildCurve = (\n  strikePrice: bigint,\n  contractSize: bigint,\n  oracleBase: number,\n  oracleDigits: number,\n): {\n  maxOutcome: bigint;\n  totalCollateral: bigint;\n  payoutCurve: HyperbolaPayoutCurve;\n} => {\n  const a = new BN(1);\n  const b = new BN(0);\n  const c = new BN(0);\n  const d = new BN((strikePrice * contractSize).toString());\n\n  const f_1 = new BN(0);\n  const _f_2 = new BN(0);\n\n  const _tempHyperbolaPayoutCurve = new HyperbolaPayoutCurve(\n    a,\n    b,\n    c,\n    d,\n    f_1,\n    _f_2,\n  );\n\n  const maxOutcome = BigInt(\n    new BN(oracleBase).pow(oracleDigits).minus(1).toString(10),\n  );\n  const maxOutcomePayout = _tempHyperbolaPayoutCurve\n    .getPayout(maxOutcome)\n    .integerValue();\n\n  return {\n    maxOutcome,\n    totalCollateral: contractSize - toBigInt(maxOutcomePayout),\n    payoutCurve: new HyperbolaPayoutCurve(\n      a,\n      b,\n      c,\n      d,\n      f_1,\n      maxOutcomePayout.negated(),\n    ),\n  };\n};\n\nconst buildPayoutFunction = (\n  strikePrice: bigint,\n  contractSize: bigint,\n  oracleBase: number,\n  oracleDigits: number,\n): { payoutFunction: PayoutFunctionV0; totalCollateral: bigint } => {\n  const { maxOutcome, totalCollateral, payoutCurve } = buildCurve(\n    strikePrice,\n    contractSize,\n    oracleBase,\n    oracleDigits,\n  );\n\n  const payoutFunction = new PayoutFunctionV0();\n  payoutFunction.endpoint0 = BigInt(0);\n  payoutFunction.endpointPayout0 = totalCollateral;\n  payoutFunction.extraPrecision0 = 0;\n\n  payoutFunction.pieces.push({\n    payoutCurvePiece: payoutCurve.toPayoutCurvePiece(),\n    endpoint: maxOutcome,\n    endpointPayout: BigInt(0),\n    extraPrecision: 0,\n  });\n\n  return {\n    payoutFunction,\n    totalCollateral,\n  };\n};\n\nexport const CoveredCall = { buildCurve, buildPayoutFunction };\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"44b9117ebb943171440507dc154985cdd59a4602","contentHash":"6c344f2a837423e6f280410d2c8b89f883829ec28ab982f70846f163a2fcd7ef"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/HyperbolaPayoutCurve.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/HyperbolaPayoutCurve.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":38}},"4":{"start":{"line":7,"column":20},"end":{"line":7,"column":50}},"5":{"start":{"line":8,"column":23},"end":{"line":8,"column":63}},"6":{"start":{"line":9,"column":20},"end":{"line":9,"column":49}},"7":{"start":{"line":10,"column":24},"end":{"line":10,"column":50}},"8":{"start":{"line":13,"column":8},"end":{"line":13,"column":19}},"9":{"start":{"line":14,"column":8},"end":{"line":14,"column":19}},"10":{"start":{"line":15,"column":8},"end":{"line":15,"column":19}},"11":{"start":{"line":16,"column":8},"end":{"line":16,"column":19}},"12":{"start":{"line":17,"column":8},"end":{"line":17,"column":49}},"13":{"start":{"line":18,"column":8},"end":{"line":18,"column":47}},"14":{"start":{"line":19,"column":8},"end":{"line":19,"column":33}},"15":{"start":{"line":22,"column":66},"end":{"line":22,"column":70}},"16":{"start":{"line":23,"column":18},"end":{"line":23,"column":56}},"17":{"start":{"line":24,"column":23},"end":{"line":43,"column":34}},"18":{"start":{"line":44,"column":8},"end":{"line":44,"column":22}},"19":{"start":{"line":47,"column":66},"end":{"line":47,"column":70}},"20":{"start":{"line":50,"column":8},"end":{"line":68,"column":9}},"21":{"start":{"line":51,"column":28},"end":{"line":60,"column":31}},"22":{"start":{"line":61,"column":12},"end":{"line":62,"column":50}},"23":{"start":{"line":62,"column":16},"end":{"line":62,"column":50}},"24":{"start":{"line":63,"column":12},"end":{"line":63,"column":30}},"25":{"start":{"line":67,"column":12},"end":{"line":67,"column":45}},"26":{"start":{"line":71,"column":76},"end":{"line":71,"column":80}},"27":{"start":{"line":72,"column":22},"end":{"line":72,"column":65}},"28":{"start":{"line":73,"column":8},"end":{"line":73,"column":42}},"29":{"start":{"line":74,"column":8},"end":{"line":74,"column":67}},"30":{"start":{"line":75,"column":8},"end":{"line":75,"column":75}},"31":{"start":{"line":76,"column":8},"end":{"line":76,"column":95}},"32":{"start":{"line":77,"column":8},"end":{"line":77,"column":65}},"33":{"start":{"line":78,"column":8},"end":{"line":78,"column":73}},"34":{"start":{"line":79,"column":8},"end":{"line":79,"column":93}},"35":{"start":{"line":80,"column":8},"end":{"line":80,"column":37}},"36":{"start":{"line":81,"column":8},"end":{"line":81,"column":45}},"37":{"start":{"line":82,"column":8},"end":{"line":82,"column":65}},"38":{"start":{"line":83,"column":8},"end":{"line":83,"column":37}},"39":{"start":{"line":84,"column":8},"end":{"line":84,"column":45}},"40":{"start":{"line":85,"column":8},"end":{"line":85,"column":65}},"41":{"start":{"line":86,"column":8},"end":{"line":86,"column":37}},"42":{"start":{"line":87,"column":8},"end":{"line":87,"column":45}},"43":{"start":{"line":88,"column":8},"end":{"line":88,"column":65}},"44":{"start":{"line":89,"column":8},"end":{"line":89,"column":37}},"45":{"start":{"line":90,"column":8},"end":{"line":90,"column":54}},"46":{"start":{"line":91,"column":8},"end":{"line":91,"column":65}},"47":{"start":{"line":92,"column":8},"end":{"line":92,"column":21}},"48":{"start":{"line":95,"column":8},"end":{"line":101,"column":46}},"49":{"start":{"line":104,"column":18},"end":{"line":106,"column":72}},"50":{"start":{"line":107,"column":18},"end":{"line":109,"column":72}},"51":{"start":{"line":110,"column":18},"end":{"line":112,"column":72}},"52":{"start":{"line":113,"column":18},"end":{"line":115,"column":72}},"53":{"start":{"line":116,"column":33},"end":{"line":118,"column":87}},"54":{"start":{"line":119,"column":32},"end":{"line":121,"column":86}},"55":{"start":{"line":122,"column":8},"end":{"line":122,"column":111}},"56":{"start":{"line":125,"column":8},"end":{"line":126,"column":60}},"57":{"start":{"line":126,"column":12},"end":{"line":126,"column":60}},"58":{"start":{"line":127,"column":64},"end":{"line":127,"column":88}},"59":{"start":{"line":128,"column":8},"end":{"line":130,"column":70}},"60":{"start":{"line":130,"column":12},"end":{"line":130,"column":70}},"61":{"start":{"line":131,"column":34},"end":{"line":131,"column":50}},"62":{"start":{"line":132,"column":22},"end":{"line":132,"column":66}},"63":{"start":{"line":133,"column":8},"end":{"line":133,"column":189}},"64":{"start":{"line":136,"column":0},"end":{"line":136,"column":52}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"loc":{"start":{"line":12,"column":80},"end":{"line":20,"column":5}},"line":12},"2":{"name":"(anonymous_2)","decl":{"start":{"line":21,"column":4},"end":{"line":21,"column":5}},"loc":{"start":{"line":21,"column":18},"end":{"line":45,"column":5}},"line":21},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":4},"end":{"line":46,"column":5}},"loc":{"start":{"line":46,"column":32},"end":{"line":69,"column":5}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":70,"column":4},"end":{"line":70,"column":5}},"loc":{"start":{"line":70,"column":25},"end":{"line":93,"column":5}},"line":70},"5":{"name":"(anonymous_5)","decl":{"start":{"line":94,"column":4},"end":{"line":94,"column":5}},"loc":{"start":{"line":94,"column":18},"end":{"line":102,"column":5}},"line":94},"6":{"name":"(anonymous_6)","decl":{"start":{"line":103,"column":4},"end":{"line":103,"column":5}},"loc":{"start":{"line":103,"column":39},"end":{"line":123,"column":5}},"line":103},"7":{"name":"(anonymous_7)","decl":{"start":{"line":124,"column":4},"end":{"line":124,"column":5}},"loc":{"start":{"line":124,"column":78},"end":{"line":134,"column":5}},"line":124}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":12,"column":63},"end":{"line":12,"column":78}},"type":"default-arg","locations":[{"start":{"line":12,"column":74},"end":{"line":12,"column":78}}],"line":12},"4":{"loc":{"start":{"line":50,"column":8},"end":{"line":68,"column":9}},"type":"if","locations":[{"start":{"line":50,"column":8},"end":{"line":68,"column":9}},{"start":{"line":50,"column":8},"end":{"line":68,"column":9}}],"line":50},"5":{"loc":{"start":{"line":61,"column":12},"end":{"line":62,"column":50}},"type":"if","locations":[{"start":{"line":61,"column":12},"end":{"line":62,"column":50}},{"start":{"line":61,"column":12},"end":{"line":62,"column":50}}],"line":61},"6":{"loc":{"start":{"line":95,"column":16},"end":{"line":101,"column":44}},"type":"binary-expr","locations":[{"start":{"line":95,"column":16},"end":{"line":95,"column":34}},{"start":{"line":96,"column":12},"end":{"line":96,"column":30}},{"start":{"line":97,"column":12},"end":{"line":97,"column":30}},{"start":{"line":98,"column":12},"end":{"line":98,"column":30}},{"start":{"line":99,"column":12},"end":{"line":99,"column":60}},{"start":{"line":100,"column":12},"end":{"line":100,"column":58}},{"start":{"line":101,"column":12},"end":{"line":101,"column":44}}],"line":95},"7":{"loc":{"start":{"line":105,"column":19},"end":{"line":105,"column":39}},"type":"cond-expr","locations":[{"start":{"line":105,"column":33},"end":{"line":105,"column":34}},{"start":{"line":105,"column":37},"end":{"line":105,"column":39}}],"line":105},"8":{"loc":{"start":{"line":108,"column":19},"end":{"line":108,"column":39}},"type":"cond-expr","locations":[{"start":{"line":108,"column":33},"end":{"line":108,"column":34}},{"start":{"line":108,"column":37},"end":{"line":108,"column":39}}],"line":108},"9":{"loc":{"start":{"line":111,"column":19},"end":{"line":111,"column":39}},"type":"cond-expr","locations":[{"start":{"line":111,"column":33},"end":{"line":111,"column":34}},{"start":{"line":111,"column":37},"end":{"line":111,"column":39}}],"line":111},"10":{"loc":{"start":{"line":114,"column":19},"end":{"line":114,"column":39}},"type":"cond-expr","locations":[{"start":{"line":114,"column":33},"end":{"line":114,"column":34}},{"start":{"line":114,"column":37},"end":{"line":114,"column":39}}],"line":114},"11":{"loc":{"start":{"line":117,"column":19},"end":{"line":117,"column":54}},"type":"cond-expr","locations":[{"start":{"line":117,"column":48},"end":{"line":117,"column":49}},{"start":{"line":117,"column":52},"end":{"line":117,"column":54}}],"line":117},"12":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":53}},"type":"cond-expr","locations":[{"start":{"line":120,"column":47},"end":{"line":120,"column":48}},{"start":{"line":120,"column":51},"end":{"line":120,"column":53}}],"line":120},"13":{"loc":{"start":{"line":125,"column":8},"end":{"line":126,"column":60}},"type":"if","locations":[{"start":{"line":125,"column":8},"end":{"line":126,"column":60}},{"start":{"line":125,"column":8},"end":{"line":126,"column":60}}],"line":125},"14":{"loc":{"start":{"line":128,"column":8},"end":{"line":130,"column":70}},"type":"if","locations":[{"start":{"line":128,"column":8},"end":{"line":130,"column":70}},{"start":{"line":128,"column":8},"end":{"line":130,"column":70}}],"line":128},"15":{"loc":{"start":{"line":128,"column":12},"end":{"line":129,"column":90}},"type":"binary-expr","locations":[{"start":{"line":128,"column":12},"end":{"line":128,"column":87}},{"start":{"line":129,"column":12},"end":{"line":129,"column":90}}],"line":128}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":45,"9":45,"10":45,"11":45,"12":45,"13":45,"14":45,"15":14914,"16":14914,"17":14914,"18":14914,"19":9914,"20":9914,"21":9914,"22":9914,"23":9910,"24":4,"25":0,"26":14,"27":14,"28":14,"29":14,"30":14,"31":14,"32":14,"33":14,"34":14,"35":14,"36":14,"37":14,"38":14,"39":14,"40":14,"41":14,"42":14,"43":14,"44":14,"45":14,"46":14,"47":14,"48":6,"49":10,"50":10,"51":10,"52":10,"53":10,"54":10,"55":10,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":1},"f":{"0":1,"1":45,"2":14914,"3":9914,"4":14,"5":6,"6":10,"7":0},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1],"3":[30],"4":[9914,0],"5":[9910,4],"6":[6,6,6,6,6,4,4],"7":[5,5],"8":[10,0],"9":[10,0],"10":[10,0],"11":[10,0],"12":[5,5],"13":[0,0],"14":[0,0],"15":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/HyperbolaPayoutCurve.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/HyperbolaPayoutCurve.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n  HyperbolaPayoutCurvePiece,\n  MessageType,\n  PayoutFunctionV0,\n  RoundingIntervalsV0,\n} from '@node-dlc/messaging';\nimport BigNumber from 'bignumber.js';\n\nimport { CETPayout } from '..';\nimport { fromPrecision, getPrecision } from '../utils/Precision';\nimport { splitIntoRanges } from './CETCalculator';\nimport PayoutCurve from './PayoutCurve';\n\nexport class HyperbolaPayoutCurve implements PayoutCurve {\n  constructor(\n    private a: BigNumber,\n    private b: BigNumber,\n    private c: BigNumber,\n    private d: BigNumber,\n    private translateOutcome: BigNumber,\n    private translatePayout: BigNumber,\n    private positive: boolean = true, // TODO: support negative pieces\n  ) {}\n\n  getPayout(_x: bigint): BigNumber {\n    const { a, b, c, d, translateOutcome, translatePayout } = this;\n    const x = new BigNumber(Number(_x));\n\n    const payout = c\n      .times(\n        x\n          .minus(translateOutcome)\n          .plus(\n            x\n              .minus(translateOutcome)\n              .exponentiatedBy(2)\n              .minus(a.times(b).times(4))\n              .squareRoot(),\n          )\n          .div(a.times(2)),\n      )\n      .plus(\n        a\n          .times(d)\n          .times(2)\n          .div(\n            x\n              .minus(translateOutcome)\n              .plus(\n                x\n                  .minus(translateOutcome)\n                  .exponentiatedBy(2)\n                  .minus(a.times(b).times(4))\n                  .squareRoot(),\n              ),\n          ),\n      )\n      .plus(translatePayout);\n\n    return payout;\n  }\n\n  getOutcomeForPayout(payout: BigNumber): bigint {\n    const { a, b, c, d, translateOutcome, translatePayout } = this;\n\n    // Inverse function\n    // y=(-ad^{2}-bf_{2}^{2}+2bf_{2}x-bx^{2}+df_{1}f_{2}-df_{1}x)/(d(f_{2}-x))\n    if (c.eq(0)) {\n      const outcome = a\n        .negated()\n        .times(d.exponentiatedBy(2))\n        .minus(b.times(translatePayout.exponentiatedBy(2)))\n        .plus(b.times(translatePayout).times(payout).times(2))\n        .minus(b.times(payout.exponentiatedBy(2)))\n        .plus(d.times(translateOutcome).times(translatePayout))\n        .minus(d.times(translateOutcome).times(payout))\n        .dividedBy(d.times(translatePayout.minus(payout)))\n        .integerValue();\n\n      if (outcome.isFinite()) return BigInt(outcome.toString());\n      return BigInt(-1);\n    } else {\n      // y=\\left((\\sqrt{((adf_{2}-adx+bcf_{2}-bcx-2c\\cdot d\\cdot f_{1})^{2}-4cd(a^{2}d^{2}-2abcd+abf_{2}^{2}-2abf_{2}x+abx^{2}-adf_{1}f_{2}+adf_{1}x+b^{2}c^{2}-bcf_{1}f_{2}+bcf_{1}x+c\\cdot d\\cdot f_{1}^{2}))}-adf_{2}+adx-bcf_{2}+bcx+2c\\cdot d\\cdot f_{1})\\right)/(2cd)\n      throw new Error('Not supported');\n    }\n  }\n\n  toPayoutCurvePiece(): HyperbolaPayoutCurvePiece {\n    const { a, b, c, d, translateOutcome, translatePayout, positive } = this;\n\n    const piece = new HyperbolaPayoutCurvePiece();\n    piece.usePositivePiece = positive;\n\n    piece.translateOutcomeSign = translateOutcome.isPositive();\n    piece.translateOutcome = BigInt(translateOutcome.abs().toString());\n    piece.translateOutcomeExtraPrecision = getPrecision(translateOutcome);\n\n    piece.translatePayoutSign = translatePayout.isPositive();\n    piece.translatePayout = BigInt(translatePayout.abs().toString());\n    piece.translatePayoutExtraPrecision = getPrecision(translatePayout);\n\n    piece.aSign = a.isPositive();\n    piece.a = BigInt(a.abs().toString());\n    piece.aExtraPrecision = getPrecision(a);\n\n    piece.bSign = b.isPositive();\n    piece.b = BigInt(b.abs().toString());\n    piece.bExtraPrecision = getPrecision(b);\n\n    piece.cSign = c.isPositive();\n    piece.c = BigInt(c.abs().toString());\n    piece.cExtraPrecision = getPrecision(c);\n\n    piece.dSign = d.isPositive();\n    piece.d = BigInt(d.integerValue().toString());\n    piece.dExtraPrecision = getPrecision(d);\n\n    return piece;\n  }\n\n  equals(curve: HyperbolaPayoutCurve): boolean {\n    return (\n      this.a.eq(curve.a) &&\n      this.b.eq(curve.b) &&\n      this.c.eq(curve.c) &&\n      this.d.eq(curve.d) &&\n      this.translateOutcome.eq(curve.translateOutcome) &&\n      this.translatePayout.eq(curve.translatePayout) &&\n      this.positive === curve.positive\n    );\n  }\n\n  static fromPayoutCurvePiece(\n    piece: HyperbolaPayoutCurvePiece,\n  ): HyperbolaPayoutCurve {\n    const a = new BigNumber(piece.a.toString())\n      .times(piece.aSign ? 1 : -1)\n      .plus(fromPrecision(piece.aExtraPrecision));\n\n    const b = new BigNumber(piece.b.toString())\n      .times(piece.bSign ? 1 : -1)\n      .plus(fromPrecision(piece.bExtraPrecision));\n\n    const c = new BigNumber(piece.c.toString())\n      .times(piece.cSign ? 1 : -1)\n      .plus(fromPrecision(piece.cExtraPrecision));\n\n    const d = new BigNumber(piece.d.toString())\n      .times(piece.dSign ? 1 : -1)\n      .plus(fromPrecision(piece.dExtraPrecision));\n\n    const translateOutcome = new BigNumber(piece.translateOutcome.toString())\n      .times(piece.translateOutcomeSign ? 1 : -1)\n      .plus(fromPrecision(piece.translateOutcomeExtraPrecision));\n\n    const translatePayout = new BigNumber(piece.translatePayout.toString())\n      .times(piece.translatePayoutSign ? 1 : -1)\n      .plus(fromPrecision(piece.translatePayoutExtraPrecision));\n\n    return new HyperbolaPayoutCurve(\n      a,\n      b,\n      c,\n      d,\n      translateOutcome,\n      translatePayout,\n      piece.usePositivePiece,\n    );\n  }\n\n  static computePayouts(\n    payoutFunction: PayoutFunctionV0,\n    totalCollateral: bigint,\n    roundingIntervals: RoundingIntervalsV0,\n  ): CETPayout[] {\n    if (payoutFunction.pieces.length !== 1)\n      throw new Error('Must have at least one piece');\n    const {\n      endpoint,\n      endpointPayout,\n      payoutCurvePiece,\n    } = payoutFunction.pieces[0];\n\n    if (\n      payoutCurvePiece.type !== MessageType.HyperbolaPayoutCurvePiece &&\n      payoutCurvePiece.type !== MessageType.OldHyperbolaPayoutCurvePiece\n    )\n      throw new Error('Payout curve piece must be a hyperbola');\n\n    const _payoutCurvePiece = payoutCurvePiece as HyperbolaPayoutCurvePiece;\n\n    const curve = this.fromPayoutCurvePiece(_payoutCurvePiece);\n\n    return splitIntoRanges(\n      payoutFunction.endpoint0,\n      endpoint,\n      payoutFunction.endpointPayout0,\n      endpointPayout,\n      totalCollateral,\n      curve,\n      roundingIntervals.intervals,\n    );\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"ca8a4d336931857070275fb3429b76db1627d32e","contentHash":"94983515844d92536450e963a0734ffffafad46fc963e66470b4ca9a673f16b2"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/utils/Precision.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/utils/Precision.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":54}},"4":{"start":{"line":7,"column":23},"end":{"line":7,"column":63}},"5":{"start":{"line":15,"column":21},"end":{"line":15,"column":92}},"6":{"start":{"line":15,"column":30},"end":{"line":15,"column":92}},"7":{"start":{"line":16,"column":0},"end":{"line":16,"column":36}},"8":{"start":{"line":22,"column":22},"end":{"line":26,"column":1}},"9":{"start":{"line":23,"column":4},"end":{"line":24,"column":50}},"10":{"start":{"line":24,"column":8},"end":{"line":24,"column":50}},"11":{"start":{"line":25,"column":4},"end":{"line":25,"column":64}},"12":{"start":{"line":27,"column":0},"end":{"line":27,"column":38}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":21},"end":{"line":15,"column":22}},"loc":{"start":{"line":15,"column":30},"end":{"line":15,"column":92}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":22,"column":22},"end":{"line":22,"column":23}},"loc":{"start":{"line":22,"column":37},"end":{"line":26,"column":1}},"line":22}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":23,"column":4},"end":{"line":24,"column":50}},"type":"if","locations":[{"start":{"line":23,"column":4},"end":{"line":24,"column":50}},{"start":{"line":23,"column":4},"end":{"line":24,"column":50}}],"line":23}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":629,"7":1,"8":1,"9":79,"10":1,"11":78,"12":1},"f":{"0":1,"1":629,"2":79},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1],"3":[1,78]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/utils/Precision.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/utils/Precision.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AAErC,oEAAoE;AACpE,iHAAiH;AAEjH;;;;GAIG;AACI,MAAM,YAAY,GAAG,CAAC,GAAc,EAAU,EAAE,CACrD,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AADpD,QAAA,YAAY,gBACwC;AAEjE;;;;GAIG;AACI,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAa,EAAE;IAC5D,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,EAAE;QAClC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,OAAO,IAAI,sBAAS,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC;AAJW,QAAA,aAAa,iBAIxB","sourcesContent":["import BigNumber from 'bignumber.js';\n\n// Precision refers to the number of digits after the decimal point.\n// Refer to https://github.com/discreetlogcontracts/dlcspecs/blob/master/PayoutCurve.md#version-0-payout_function\n\n/**\n * Extract the precision of a number\n * @param num\n * @returns The precision of the number\n */\nexport const getPrecision = (num: BigNumber): number =>\n  num.decimalPlaces(16).abs().modulo(1).shiftedBy(16).toNumber();\n\n/**\n * Creates a precise number from a precision\n * @param precision\n * @returns The number with the given precision\n */\nexport const fromPrecision = (precision: number): BigNumber => {\n  if (precision.toString().length > 16)\n    throw new Error('Precision is too large');\n  return new BigNumber(precision).shiftedBy(-16);\n};\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5eb253d11488aac3058964311aa8d1bee2d44306","contentHash":"e8e219e7f755c819cfeef63f3efb2871da3b885a49cf18d9b3f2acbf677e6114"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/ShortPut.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/ShortPut.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":20},"end":{"line":7,"column":50}},"5":{"start":{"line":8,"column":23},"end":{"line":8,"column":63}},"6":{"start":{"line":9,"column":31},"end":{"line":9,"column":65}},"7":{"start":{"line":10,"column":19},"end":{"line":24,"column":1}},"8":{"start":{"line":11,"column":14},"end":{"line":11,"column":44}},"9":{"start":{"line":12,"column":14},"end":{"line":12,"column":43}},"10":{"start":{"line":13,"column":14},"end":{"line":13,"column":43}},"11":{"start":{"line":14,"column":14},"end":{"line":14,"column":81}},"12":{"start":{"line":15,"column":16},"end":{"line":15,"column":45}},"13":{"start":{"line":16,"column":16},"end":{"line":16,"column":94}},"14":{"start":{"line":17,"column":24},"end":{"line":17,"column":93}},"15":{"start":{"line":18,"column":23},"end":{"line":18,"column":109}},"16":{"start":{"line":19,"column":4},"end":{"line":23,"column":6}},"17":{"start":{"line":25,"column":28},"end":{"line":40,"column":1}},"18":{"start":{"line":26,"column":40},"end":{"line":26,"column":120}},"19":{"start":{"line":27,"column":27},"end":{"line":27,"column":61}},"20":{"start":{"line":28,"column":4},"end":{"line":28,"column":41}},"21":{"start":{"line":29,"column":4},"end":{"line":29,"column":47}},"22":{"start":{"line":30,"column":4},"end":{"line":30,"column":39}},"23":{"start":{"line":31,"column":4},"end":{"line":36,"column":7}},"24":{"start":{"line":37,"column":4},"end":{"line":39,"column":6}},"25":{"start":{"line":41,"column":0},"end":{"line":41,"column":55}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":19},"end":{"line":10,"column":20}},"loc":{"start":{"line":10,"column":93},"end":{"line":24,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":25,"column":28},"end":{"line":25,"column":29}},"loc":{"start":{"line":25,"column":102},"end":{"line":40,"column":1}},"line":25}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":10,"9":10,"10":10,"11":10,"12":10,"13":10,"14":10,"15":10,"16":10,"17":1,"18":4,"19":4,"20":4,"21":4,"22":4,"23":4,"24":4,"25":1},"f":{"0":1,"1":10,"2":4},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/ShortPut.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/ShortPut.ts"],"names":[],"mappings":";;;;;;AAAA,mDAAuD;AACvD,gEAA8B;AAE9B,kEAA+D;AAE/D,MAAM,UAAU,GAAG,CACjB,WAAmB,EACnB,YAAoB,EACpB,eAAuB,EACvB,UAAkB,EAClB,YAAoB,EAKpB,EAAE;IACF,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE1D,MAAM,GAAG,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,sBAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IAEvE,MAAM,WAAW,GAAG,IAAI,2CAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnE,MAAM,UAAU,GAAG,MAAM,CACvB,IAAI,sBAAE,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC3D,CAAC;IAEF,OAAO;QACL,UAAU;QACV,eAAe;QACf,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,WAAmB,EACnB,YAAoB,EACpB,eAAuB,EACvB,UAAkB,EAClB,YAAoB,EACkB,EAAE;IACxC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,UAAU,CAC5C,WAAW,EACX,YAAY,EACZ,eAAe,EACf,UAAU,EACV,YAAY,CACb,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,4BAAgB,EAAE,CAAC;IAC9C,cAAc,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrC,cAAc,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3C,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;IAEnC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,gBAAgB,EAAE,WAAW,CAAC,kBAAkB,EAAE;QAClD,QAAQ,EAAE,UAAU;QACpB,cAAc,EAAE,eAAe;QAC/B,cAAc,EAAE,CAAC;KAClB,CAAC,CAAC;IAEH,OAAO;QACL,cAAc;KACf,CAAC;AACJ,CAAC,CAAC;AAEW,QAAA,QAAQ,GAAG,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { PayoutFunctionV0 } from '@node-dlc/messaging';\nimport BN from 'bignumber.js';\n\nimport { HyperbolaPayoutCurve } from '../HyperbolaPayoutCurve';\n\nconst buildCurve = (\n  strikePrice: bigint,\n  contractSize: bigint,\n  totalCollateral: bigint,\n  oracleBase: number,\n  oracleDigits: number,\n): {\n  maxOutcome: bigint;\n  totalCollateral: bigint;\n  payoutCurve: HyperbolaPayoutCurve;\n} => {\n  const a = new BN(-1);\n  const b = new BN(0);\n  const c = new BN(0);\n  const d = new BN((strikePrice * contractSize).toString());\n\n  const f_1 = new BN(0);\n  const f_2 = new BN(Number(contractSize)).plus(Number(totalCollateral));\n\n  const payoutCurve = new HyperbolaPayoutCurve(a, b, c, d, f_1, f_2);\n\n  const maxOutcome = BigInt(\n    new BN(oracleBase).pow(oracleDigits).minus(1).toString(10),\n  );\n\n  return {\n    maxOutcome,\n    totalCollateral,\n    payoutCurve,\n  };\n};\n\nconst buildPayoutFunction = (\n  strikePrice: bigint,\n  contractSize: bigint,\n  totalCollateral: bigint,\n  oracleBase: number,\n  oracleDigits: number,\n): { payoutFunction: PayoutFunctionV0 } => {\n  const { maxOutcome, payoutCurve } = buildCurve(\n    strikePrice,\n    contractSize,\n    totalCollateral,\n    oracleBase,\n    oracleDigits,\n  );\n\n  const payoutFunction = new PayoutFunctionV0();\n  payoutFunction.endpoint0 = BigInt(0);\n  payoutFunction.endpointPayout0 = BigInt(0);\n  payoutFunction.extraPrecision0 = 0;\n\n  payoutFunction.pieces.push({\n    payoutCurvePiece: payoutCurve.toPayoutCurvePiece(),\n    endpoint: maxOutcome,\n    endpointPayout: totalCollateral,\n    extraPrecision: 0,\n  });\n\n  return {\n    payoutFunction,\n  };\n};\n\nexport const ShortPut = { buildCurve, buildPayoutFunction };\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"bc429134ee5817338a22ddb3a6d26fff6d50057e","contentHash":"5fc88a5a65a6ca6cbc75f7273447727a0de49c043687b82ace328034fcc2e667"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/index.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/index.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":12,"column":3}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":33}},"2":{"start":{"line":3,"column":26},"end":{"line":3,"column":33}},"3":{"start":{"line":4,"column":15},"end":{"line":4,"column":52}},"4":{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},"5":{"start":{"line":6,"column":6},"end":{"line":6,"column":68}},"6":{"start":{"line":6,"column":51},"end":{"line":6,"column":63}},"7":{"start":{"line":8,"column":4},"end":{"line":8,"column":39}},"8":{"start":{"line":10,"column":4},"end":{"line":10,"column":33}},"9":{"start":{"line":10,"column":26},"end":{"line":10,"column":33}},"10":{"start":{"line":11,"column":4},"end":{"line":11,"column":17}},"11":{"start":{"line":13,"column":19},"end":{"line":15,"column":1}},"12":{"start":{"line":14,"column":4},"end":{"line":14,"column":126}},"13":{"start":{"line":14,"column":21},"end":{"line":14,"column":126}},"14":{"start":{"line":14,"column":95},"end":{"line":14,"column":126}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":62}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":400}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":52}},"18":{"start":{"line":20,"column":16},"end":{"line":20,"column":44}},"19":{"start":{"line":21,"column":0},"end":{"line":21,"column":108}},"20":{"start":{"line":21,"column":79},"end":{"line":21,"column":102}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":110}},"22":{"start":{"line":22,"column":80},"end":{"line":22,"column":104}},"23":{"start":{"line":23,"column":0},"end":{"line":23,"column":116}},"24":{"start":{"line":23,"column":83},"end":{"line":23,"column":110}},"25":{"start":{"line":24,"column":0},"end":{"line":24,"column":124}},"26":{"start":{"line":24,"column":87},"end":{"line":24,"column":118}},"27":{"start":{"line":25,"column":0},"end":{"line":25,"column":114}},"28":{"start":{"line":25,"column":82},"end":{"line":25,"column":108}},"29":{"start":{"line":26,"column":0},"end":{"line":26,"column":102}},"30":{"start":{"line":26,"column":76},"end":{"line":26,"column":96}},"31":{"start":{"line":27,"column":0},"end":{"line":27,"column":106}},"32":{"start":{"line":27,"column":78},"end":{"line":27,"column":100}},"33":{"start":{"line":28,"column":0},"end":{"line":28,"column":108}},"34":{"start":{"line":28,"column":79},"end":{"line":28,"column":102}},"35":{"start":{"line":29,"column":0},"end":{"line":29,"column":116}},"36":{"start":{"line":29,"column":83},"end":{"line":29,"column":110}},"37":{"start":{"line":30,"column":0},"end":{"line":30,"column":57}},"38":{"start":{"line":31,"column":0},"end":{"line":31,"column":43}},"39":{"start":{"line":32,"column":0},"end":{"line":32,"column":48}},"40":{"start":{"line":33,"column":0},"end":{"line":33,"column":45}},"41":{"start":{"line":34,"column":0},"end":{"line":34,"column":46}},"42":{"start":{"line":35,"column":0},"end":{"line":35,"column":47}},"43":{"start":{"line":36,"column":0},"end":{"line":36,"column":51}},"44":{"start":{"line":37,"column":0},"end":{"line":37,"column":42}},"45":{"start":{"line":38,"column":0},"end":{"line":38,"column":51}},"46":{"start":{"line":39,"column":0},"end":{"line":39,"column":56}},"47":{"start":{"line":41,"column":28},"end":{"line":41,"column":60}},"48":{"start":{"line":42,"column":0},"end":{"line":42,"column":158}},"49":{"start":{"line":42,"column":98},"end":{"line":42,"column":152}},"50":{"start":{"line":43,"column":0},"end":{"line":43,"column":158}},"51":{"start":{"line":43,"column":98},"end":{"line":43,"column":152}},"52":{"start":{"line":44,"column":0},"end":{"line":44,"column":154}},"53":{"start":{"line":44,"column":96},"end":{"line":44,"column":148}},"54":{"start":{"line":45,"column":0},"end":{"line":45,"column":154}},"55":{"start":{"line":45,"column":96},"end":{"line":45,"column":148}},"56":{"start":{"line":46,"column":0},"end":{"line":46,"column":154}},"57":{"start":{"line":46,"column":96},"end":{"line":46,"column":148}},"58":{"start":{"line":47,"column":0},"end":{"line":47,"column":158}},"59":{"start":{"line":47,"column":98},"end":{"line":47,"column":152}},"60":{"start":{"line":49,"column":18},"end":{"line":49,"column":50}},"61":{"start":{"line":50,"column":0},"end":{"line":50,"column":127}},"62":{"start":{"line":50,"column":92},"end":{"line":50,"column":121}},"63":{"start":{"line":51,"column":0},"end":{"line":51,"column":58}},"64":{"start":{"line":52,"column":0},"end":{"line":52,"column":63}},"65":{"start":{"line":53,"column":0},"end":{"line":53,"column":63}},"66":{"start":{"line":54,"column":0},"end":{"line":54,"column":68}},"67":{"start":{"line":55,"column":0},"end":{"line":55,"column":51}},"68":{"start":{"line":56,"column":0},"end":{"line":56,"column":60}},"69":{"start":{"line":57,"column":0},"end":{"line":57,"column":60}},"70":{"start":{"line":58,"column":0},"end":{"line":58,"column":56}},"71":{"start":{"line":60,"column":0},"end":{"line":60,"column":54}},"72":{"start":{"line":61,"column":0},"end":{"line":61,"column":51}},"73":{"start":{"line":62,"column":0},"end":{"line":62,"column":61}},"74":{"start":{"line":63,"column":0},"end":{"line":63,"column":52}},"75":{"start":{"line":64,"column":0},"end":{"line":64,"column":62}},"76":{"start":{"line":65,"column":0},"end":{"line":65,"column":50}},"77":{"start":{"line":66,"column":0},"end":{"line":66,"column":52}},"78":{"start":{"line":68,"column":0},"end":{"line":68,"column":56}},"79":{"start":{"line":69,"column":0},"end":{"line":69,"column":60}},"80":{"start":{"line":70,"column":0},"end":{"line":70,"column":56}},"81":{"start":{"line":71,"column":0},"end":{"line":71,"column":61}},"82":{"start":{"line":72,"column":0},"end":{"line":72,"column":57}},"83":{"start":{"line":73,"column":0},"end":{"line":73,"column":56}},"84":{"start":{"line":74,"column":0},"end":{"line":74,"column":59}},"85":{"start":{"line":75,"column":0},"end":{"line":75,"column":57}},"86":{"start":{"line":76,"column":0},"end":{"line":76,"column":54}},"87":{"start":{"line":77,"column":0},"end":{"line":77,"column":52}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":74},"end":{"line":2,"column":75}},"loc":{"start":{"line":2,"column":96},"end":{"line":9,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":6,"column":38},"end":{"line":6,"column":39}},"loc":{"start":{"line":6,"column":49},"end":{"line":6,"column":65}},"line":6},"2":{"name":"(anonymous_2)","decl":{"start":{"line":9,"column":6},"end":{"line":9,"column":7}},"loc":{"start":{"line":9,"column":28},"end":{"line":12,"column":1}},"line":9},"3":{"name":"(anonymous_3)","decl":{"start":{"line":13,"column":50},"end":{"line":13,"column":51}},"loc":{"start":{"line":13,"column":71},"end":{"line":15,"column":1}},"line":13},"4":{"name":"(anonymous_4)","decl":{"start":{"line":21,"column":65},"end":{"line":21,"column":66}},"loc":{"start":{"line":21,"column":77},"end":{"line":21,"column":104}},"line":21},"5":{"name":"(anonymous_5)","decl":{"start":{"line":22,"column":66},"end":{"line":22,"column":67}},"loc":{"start":{"line":22,"column":78},"end":{"line":22,"column":106}},"line":22},"6":{"name":"(anonymous_6)","decl":{"start":{"line":23,"column":69},"end":{"line":23,"column":70}},"loc":{"start":{"line":23,"column":81},"end":{"line":23,"column":112}},"line":23},"7":{"name":"(anonymous_7)","decl":{"start":{"line":24,"column":73},"end":{"line":24,"column":74}},"loc":{"start":{"line":24,"column":85},"end":{"line":24,"column":120}},"line":24},"8":{"name":"(anonymous_8)","decl":{"start":{"line":25,"column":68},"end":{"line":25,"column":69}},"loc":{"start":{"line":25,"column":80},"end":{"line":25,"column":110}},"line":25},"9":{"name":"(anonymous_9)","decl":{"start":{"line":26,"column":62},"end":{"line":26,"column":63}},"loc":{"start":{"line":26,"column":74},"end":{"line":26,"column":98}},"line":26},"10":{"name":"(anonymous_10)","decl":{"start":{"line":27,"column":64},"end":{"line":27,"column":65}},"loc":{"start":{"line":27,"column":76},"end":{"line":27,"column":102}},"line":27},"11":{"name":"(anonymous_11)","decl":{"start":{"line":28,"column":65},"end":{"line":28,"column":66}},"loc":{"start":{"line":28,"column":77},"end":{"line":28,"column":104}},"line":28},"12":{"name":"(anonymous_12)","decl":{"start":{"line":29,"column":69},"end":{"line":29,"column":70}},"loc":{"start":{"line":29,"column":81},"end":{"line":29,"column":112}},"line":29},"13":{"name":"(anonymous_13)","decl":{"start":{"line":42,"column":84},"end":{"line":42,"column":85}},"loc":{"start":{"line":42,"column":96},"end":{"line":42,"column":154}},"line":42},"14":{"name":"(anonymous_14)","decl":{"start":{"line":43,"column":84},"end":{"line":43,"column":85}},"loc":{"start":{"line":43,"column":96},"end":{"line":43,"column":154}},"line":43},"15":{"name":"(anonymous_15)","decl":{"start":{"line":44,"column":82},"end":{"line":44,"column":83}},"loc":{"start":{"line":44,"column":94},"end":{"line":44,"column":150}},"line":44},"16":{"name":"(anonymous_16)","decl":{"start":{"line":45,"column":82},"end":{"line":45,"column":83}},"loc":{"start":{"line":45,"column":94},"end":{"line":45,"column":150}},"line":45},"17":{"name":"(anonymous_17)","decl":{"start":{"line":46,"column":82},"end":{"line":46,"column":83}},"loc":{"start":{"line":46,"column":94},"end":{"line":46,"column":150}},"line":46},"18":{"name":"(anonymous_18)","decl":{"start":{"line":47,"column":84},"end":{"line":47,"column":85}},"loc":{"start":{"line":47,"column":96},"end":{"line":47,"column":154}},"line":47},"19":{"name":"(anonymous_19)","decl":{"start":{"line":50,"column":78},"end":{"line":50,"column":79}},"loc":{"start":{"line":50,"column":90},"end":{"line":50,"column":123}},"line":50}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":12,"column":3}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":57},"end":{"line":12,"column":2}}],"line":2},"1":{"loc":{"start":{"line":2,"column":57},"end":{"line":12,"column":2}},"type":"cond-expr","locations":[{"start":{"line":2,"column":74},"end":{"line":9,"column":1}},{"start":{"line":9,"column":6},"end":{"line":12,"column":1}}],"line":2},"2":{"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":33}},"type":"if","locations":[{"start":{"line":3,"column":4},"end":{"line":3,"column":33}},{"start":{"line":3,"column":4},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},"type":"if","locations":[{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},{"start":{"line":5,"column":4},"end":{"line":7,"column":5}}],"line":5},"4":{"loc":{"start":{"line":5,"column":8},"end":{"line":5,"column":85}},"type":"binary-expr","locations":[{"start":{"line":5,"column":8},"end":{"line":5,"column":13}},{"start":{"line":5,"column":18},"end":{"line":5,"column":84}}],"line":5},"5":{"loc":{"start":{"line":5,"column":18},"end":{"line":5,"column":84}},"type":"cond-expr","locations":[{"start":{"line":5,"column":34},"end":{"line":5,"column":47}},{"start":{"line":5,"column":50},"end":{"line":5,"column":84}}],"line":5},"6":{"loc":{"start":{"line":5,"column":50},"end":{"line":5,"column":84}},"type":"binary-expr","locations":[{"start":{"line":5,"column":50},"end":{"line":5,"column":63}},{"start":{"line":5,"column":67},"end":{"line":5,"column":84}}],"line":5},"7":{"loc":{"start":{"line":10,"column":4},"end":{"line":10,"column":33}},"type":"if","locations":[{"start":{"line":10,"column":4},"end":{"line":10,"column":33}},{"start":{"line":10,"column":4},"end":{"line":10,"column":33}}],"line":10},"8":{"loc":{"start":{"line":13,"column":19},"end":{"line":15,"column":1}},"type":"binary-expr","locations":[{"start":{"line":13,"column":20},"end":{"line":13,"column":24}},{"start":{"line":13,"column":28},"end":{"line":13,"column":45}},{"start":{"line":13,"column":50},"end":{"line":15,"column":1}}],"line":13},"9":{"loc":{"start":{"line":14,"column":21},"end":{"line":14,"column":126}},"type":"if","locations":[{"start":{"line":14,"column":21},"end":{"line":14,"column":126}},{"start":{"line":14,"column":21},"end":{"line":14,"column":126}}],"line":14},"10":{"loc":{"start":{"line":14,"column":25},"end":{"line":14,"column":93}},"type":"binary-expr","locations":[{"start":{"line":14,"column":25},"end":{"line":14,"column":40}},{"start":{"line":14,"column":44},"end":{"line":14,"column":93}}],"line":14}},"s":{"0":1,"1":88,"2":88,"3":88,"4":88,"5":65,"6":233,"7":88,"8":0,"9":0,"10":0,"11":1,"12":36,"13":103,"14":88,"15":1,"16":1,"17":1,"18":1,"19":1,"20":0,"21":1,"22":0,"23":1,"24":0,"25":1,"26":0,"27":1,"28":0,"29":1,"30":0,"31":1,"32":0,"33":1,"34":0,"35":1,"36":0,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":0,"50":1,"51":0,"52":1,"53":0,"54":1,"55":0,"56":1,"57":0,"58":1,"59":0,"60":1,"61":1,"62":0,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1},"f":{"0":88,"1":233,"2":0,"3":36,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0},"b":{"0":[1,1,1],"1":[1,0],"2":[88,0],"3":[65,23],"4":[88,88],"5":[23,65],"6":[65,0],"7":[0,0],"8":[1,1,1],"9":[88,15],"10":[103,103]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/index.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAElC,sFAAsF;AACtF,6CAU2B;AATzB,gGAAA,KAAK,OAAA;AACL,iGAAA,MAAM,OAAA;AACN,oGAAA,SAAS,OAAA;AACT,wGAAA,aAAa,OAAA;AACb,mGAAA,QAAQ,OAAA;AACR,6FAAA,EAAE,OAAA;AACF,+FAAA,IAAI,OAAA;AACJ,gGAAA,KAAK,OAAA;AACL,oGAAA,SAAS,OAAA;AAGX,yDAAuC;AACvC,2CAAyB;AACzB,gDAA8B;AAC9B,6CAA2B;AAC3B,8CAA4B;AAC5B,+CAA6B;AAC7B,mDAAiC;AACjC,0CAAwB;AACxB,mDAAiC;AACjC,wDAAsC;AAEtC,0DAA0D;AAC1D,6DAO+B;AAN7B,+HAAA,wBAAwB,OAAA;AACxB,+HAAA,wBAAwB,OAAA;AACxB,6HAAA,sBAAsB,OAAA;AACtB,6HAAA,sBAAsB,OAAA;AACtB,6HAAA,sBAAsB,OAAA;AACtB,+HAAA,wBAAwB,OAAA;AAG1B,yEAAyE;AACzE,mDAAwE;AAA/D,+GAAA,SAAS,OAAsB;AACxC,0DAAwC;AACxC,+DAA6C;AAC7C,+DAA6C;AAC7C,oEAAkD;AAClD,mDAAiC;AACjC,4DAA0C;AAC1C,4DAA0C;AAC1C,wDAAsC;AAEtC,iCAAiC;AACjC,sDAAoC;AACpC,mDAAiC;AACjC,6DAA2C;AAC3C,oDAAkC;AAClC,8DAA4C;AAC5C,kDAAgC;AAChC,oDAAkC;AAElC,+BAA+B;AAC/B,wDAAsC;AACtC,4DAA0C;AAC1C,wDAAsC;AACtC,6DAA2C;AAC3C,yDAAuC;AACvC,wDAAsC;AACtC,2DAAyC;AACzC,yDAAuC;AAEvC,sDAAoC;AACpC,oDAAkC","sourcesContent":["export * from '@node-dlc/bitcoin';\n\n// Explicitly re-export commonly used types from bitcoin for better TypeScript support\nexport {\n  Value,\n  Script,\n  HashValue,\n  HashByteOrder,\n  OutPoint,\n  Tx,\n  TxIn,\n  TxOut,\n  TxBuilder,\n} from '@node-dlc/bitcoin';\n\nexport * from './AsyncProcessingQueue';\nexport * from './Base32';\nexport * from './BigIntUtils';\nexport * from './BitField';\nexport * from './ChannelId';\nexport * from './LinkedList';\nexport * from './LinkedListNode';\nexport * from './Queue';\nexport * from './ShortChannelId';\nexport * from './ShortChannelIdUtils';\n\n// Explicitly export the utility functions that wire needs\nexport {\n  shortChannelIdFromBuffer,\n  shortChannelIdFromNumber,\n  shortChannelIdToBuffer,\n  shortChannelIdToNumber,\n  shortChannelIdToString,\n  shortChannelIdFromString,\n} from './ShortChannelIdUtils';\n\n// Lightning subdirectory exports (excluding ChannelId to avoid conflict)\nexport { ChannelId as LightningChannelId } from './lightning/ChannelId';\nexport * from './lightning/ChannelKeys';\nexport * from './lightning/CommitmentNumber';\nexport * from './lightning/CommitmentSecret';\nexport * from './lightning/CommitmentSecretStore';\nexport * from './lightning/Htlc';\nexport * from './lightning/HtlcDirection';\nexport * from './lightning/ScriptFactory';\nexport * from './lightning/TxFactory';\n\n// Original node-dlc core exports\nexport * from './dlc/CETCalculator';\nexport * from './dlc/CoinSelect';\nexport * from './dlc/HyperbolaPayoutCurve';\nexport * from './dlc/PayoutCurve';\nexport * from './dlc/PolynomialPayoutCurve';\nexport * from './dlc/TxBuilder';\nexport * from './dlc/TxFinalizer';\n\n// Finance subdirectory exports\nexport * from './dlc/finance/Builder';\nexport * from './dlc/finance/CoveredCall';\nexport * from './dlc/finance/CsoInfo';\nexport * from './dlc/finance/LinearPayout';\nexport * from './dlc/finance/LongCall';\nexport * from './dlc/finance/LongPut';\nexport * from './dlc/finance/OptionInfo';\nexport * from './dlc/finance/ShortPut';\n\nexport * from './utils/BigIntUtils';\nexport * from './utils/Precision';\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"42824576001f6194399b50aa0d9872e5cffebd2c","contentHash":"be86d04f312bfbb0c53404b0f37a4edd581137eea60c858c518d925a54de49de"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/AsyncProcessingQueue.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/AsyncProcessingQueue.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":38}},"2":{"start":{"line":4,"column":17},"end":{"line":4,"column":34}},"3":{"start":{"line":5,"column":16},"end":{"line":5,"column":34}},"4":{"start":{"line":12,"column":8},"end":{"line":12,"column":16}},"5":{"start":{"line":13,"column":8},"end":{"line":13,"column":22}},"6":{"start":{"line":14,"column":8},"end":{"line":14,"column":42}},"7":{"start":{"line":15,"column":8},"end":{"line":15,"column":45}},"8":{"start":{"line":21,"column":8},"end":{"line":21,"column":35}},"9":{"start":{"line":24,"column":8},"end":{"line":25,"column":58}},"10":{"start":{"line":25,"column":12},"end":{"line":25,"column":58}},"11":{"start":{"line":32,"column":8},"end":{"line":32,"column":34}},"12":{"start":{"line":36,"column":8},"end":{"line":36,"column":30}},"13":{"start":{"line":39,"column":8},"end":{"line":47,"column":9}},"14":{"start":{"line":40,"column":12},"end":{"line":46,"column":13}},"15":{"start":{"line":41,"column":30},"end":{"line":41,"column":51}},"16":{"start":{"line":42,"column":16},"end":{"line":42,"column":38}},"17":{"start":{"line":45,"column":16},"end":{"line":45,"column":39}},"18":{"start":{"line":49,"column":8},"end":{"line":49,"column":29}},"19":{"start":{"line":51,"column":8},"end":{"line":51,"column":38}},"20":{"start":{"line":54,"column":0},"end":{"line":54,"column":52}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":4},"end":{"line":11,"column":5}},"loc":{"start":{"line":11,"column":20},"end":{"line":16,"column":5}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":20,"column":4},"end":{"line":20,"column":5}},"loc":{"start":{"line":20,"column":19},"end":{"line":26,"column":5}},"line":20},"2":{"name":"(anonymous_2)","decl":{"start":{"line":31,"column":4},"end":{"line":31,"column":5}},"loc":{"start":{"line":31,"column":15},"end":{"line":33,"column":5}},"line":31},"3":{"name":"(anonymous_3)","decl":{"start":{"line":34,"column":4},"end":{"line":34,"column":5}},"loc":{"start":{"line":34,"column":19},"end":{"line":52,"column":5}},"line":34}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":8},"end":{"line":25,"column":58}},"type":"if","locations":[{"start":{"line":24,"column":8},"end":{"line":25,"column":58}},{"start":{"line":24,"column":8},"end":{"line":25,"column":58}}],"line":24}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":1},"f":{"0":0,"1":0,"2":0,"3":0},"b":{"0":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/AsyncProcessingQueue.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/AsyncProcessingQueue.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAEtC,mCAAgC;AAEhC;;;GAGG;AACH,MAAa,oBAAwB,SAAQ,qBAAY;IAKvD,YAAY,EAAmC;QAC7C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,aAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,KAAQ;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE3B,yEAAyE;QACzE,uEAAuE;QACvE,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;IAED;;;OAGG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,iCAAiC;QACjC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtB,kDAAkD;QAClD,oDAAoD;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI;gBACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACvB;YAAC,OAAO,EAAE,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;aACxB;SACF;QAED,8BAA8B;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAErB,+DAA+D;QAC/D,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,CAAC;CACF;AApDD,oDAoDC","sourcesContent":["import { EventEmitter } from 'events';\n\nimport { Queue } from './Queue';\n\n/**\n * Serializes execution of events. This class is constructed with\n * a delegate function that is executed for each item that is enqueued.\n */\nexport class AsyncProcessingQueue<T> extends EventEmitter {\n  private _fn: (...args: T[]) => Promise<void>;\n  private _queue: Queue<any>;\n  private _flushHandle: any;\n\n  constructor(fn: (...args: T[]) => Promise<void>) {\n    super();\n    this._fn = fn;\n    this._queue = new Queue();\n    this._flush = this._flush.bind(this);\n  }\n\n  /**\n   * Adds a new item to the processing queue\n   */\n  public enqueue(value: T) {\n    this._queue.enqueue(value);\n\n    // Postpone flushing until end of event loop to allow multiple operations\n    // to enqueue. This handle will be cleared once flushing has completed.\n    if (!this._flushHandle) this._flushHandle = setImmediate(this._flush);\n  }\n\n  /**\n   * Gets the number of pending items in the processor queue\n   * @type {number}\n   */\n  get size(): number {\n    return this._queue.length;\n  }\n\n  private async _flush() {\n    // emit that flushing is starting\n    this.emit('flushing');\n\n    // process all items on the queue, even items that\n    // are added to the queue while flushing is occuring\n    while (this._queue.length > 0) {\n      try {\n        const value = this._queue.dequeue();\n        await this._fn(value);\n      } catch (ex) {\n        this.emit('error', ex);\n      }\n    }\n\n    // emit flushing has completed\n    this.emit('flushed');\n\n    // clear flush handle so that next enqueue will trigger a flush\n    this._flushHandle = undefined;\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"10b204eb2df8e5f0a40a50d1f7b20e9bf59b0621","contentHash":"42dbe33882ca44d0d9d5eb8fd86a9e77722e8f5f7aba3d0d2c3bd34254f6bb37"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/Queue.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/Queue.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":23}},"2":{"start":{"line":4,"column":21},"end":{"line":4,"column":44}},"3":{"start":{"line":10,"column":8},"end":{"line":10,"column":51}},"4":{"start":{"line":16,"column":8},"end":{"line":16,"column":56}},"5":{"start":{"line":22,"column":8},"end":{"line":22,"column":33}},"6":{"start":{"line":28,"column":8},"end":{"line":28,"column":30}},"7":{"start":{"line":34,"column":8},"end":{"line":34,"column":36}},"8":{"start":{"line":37,"column":0},"end":{"line":37,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":9,"column":4},"end":{"line":9,"column":5}},"loc":{"start":{"line":9,"column":18},"end":{"line":11,"column":5}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":4},"end":{"line":15,"column":5}},"loc":{"start":{"line":15,"column":11},"end":{"line":17,"column":5}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":21,"column":4},"end":{"line":21,"column":5}},"loc":{"start":{"line":21,"column":17},"end":{"line":23,"column":5}},"line":21},"3":{"name":"(anonymous_3)","decl":{"start":{"line":27,"column":4},"end":{"line":27,"column":5}},"loc":{"start":{"line":27,"column":19},"end":{"line":29,"column":5}},"line":27},"4":{"name":"(anonymous_4)","decl":{"start":{"line":33,"column":4},"end":{"line":33,"column":5}},"loc":{"start":{"line":33,"column":14},"end":{"line":35,"column":5}},"line":33}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":15},"end":{"line":16,"column":55}},"type":"binary-expr","locations":[{"start":{"line":16,"column":15},"end":{"line":16,"column":30}},{"start":{"line":16,"column":34},"end":{"line":16,"column":55}}],"line":16}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{"0":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/Queue.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/Queue.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAE1C;;GAEG;AACH,MAAa,KAAK;IAAlB;QACU,UAAK,GAAkB,IAAI,uBAAU,EAAK,CAAC;IA6BrD,CAAC;IA3BC;;OAEG;IACI,IAAI;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,KAAQ;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;CACF;AA9BD,sBA8BC","sourcesContent":["import { LinkedList } from './LinkedList';\n\n/**\n * FIFO queue implemented with O(1) enqueue and dequeue operations\n */\nexport class Queue<T> {\n  private _list: LinkedList<T> = new LinkedList<T>();\n\n  /**\n   * Peak the tip value\n   */\n  public peak(): T {\n    return this._list.head && this._list.head.value;\n  }\n\n  /**\n   * Returns the length of the queue\n   */\n  get length(): number {\n    return this._list.length;\n  }\n\n  /**\n   * Enqueue a value\n   */\n  public enqueue(value: T) {\n    this._list.add(value);\n  }\n\n  /**\n   * Dequeue top most value\n   */\n  public dequeue(): T {\n    return this._list.remove(0);\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"a7656297178b957b3e7381f8730b648157138511","contentHash":"45dda33480d8efb67da4baca209c048a7ff122597c044f9478b71efced1c1f56"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/LinkedList.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/LinkedList.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":28}},"2":{"start":{"line":4,"column":25},"end":{"line":4,"column":52}},"3":{"start":{"line":11,"column":8},"end":{"line":11,"column":24}},"4":{"start":{"line":12,"column":8},"end":{"line":12,"column":25}},"5":{"start":{"line":13,"column":8},"end":{"line":13,"column":25}},"6":{"start":{"line":21,"column":21},"end":{"line":21,"column":63}},"7":{"start":{"line":23,"column":8},"end":{"line":28,"column":9}},"8":{"start":{"line":24,"column":12},"end":{"line":24,"column":29}},"9":{"start":{"line":25,"column":12},"end":{"line":25,"column":29}},"10":{"start":{"line":26,"column":12},"end":{"line":26,"column":26}},"11":{"start":{"line":27,"column":12},"end":{"line":27,"column":24}},"12":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}},"13":{"start":{"line":31,"column":8},"end":{"line":31,"column":30}},"14":{"start":{"line":32,"column":8},"end":{"line":32,"column":25}},"15":{"start":{"line":33,"column":8},"end":{"line":33,"column":22}},"16":{"start":{"line":34,"column":8},"end":{"line":34,"column":20}},"17":{"start":{"line":40,"column":21},"end":{"line":40,"column":39}},"18":{"start":{"line":41,"column":8},"end":{"line":42,"column":30}},"19":{"start":{"line":42,"column":12},"end":{"line":42,"column":30}},"20":{"start":{"line":49,"column":8},"end":{"line":51,"column":9}},"21":{"start":{"line":50,"column":12},"end":{"line":50,"column":55}},"22":{"start":{"line":53,"column":26},"end":{"line":53,"column":35}},"23":{"start":{"line":54,"column":20},"end":{"line":54,"column":21}},"24":{"start":{"line":55,"column":8},"end":{"line":58,"column":9}},"25":{"start":{"line":56,"column":12},"end":{"line":56,"column":43}},"26":{"start":{"line":57,"column":12},"end":{"line":57,"column":20}},"27":{"start":{"line":59,"column":8},"end":{"line":59,"column":27}},"28":{"start":{"line":68,"column":8},"end":{"line":70,"column":9}},"29":{"start":{"line":69,"column":12},"end":{"line":69,"column":55}},"30":{"start":{"line":72,"column":23},"end":{"line":72,"column":27}},"31":{"start":{"line":73,"column":23},"end":{"line":73,"column":27}},"32":{"start":{"line":75,"column":8},"end":{"line":80,"column":9}},"33":{"start":{"line":76,"column":12},"end":{"line":76,"column":35}},"34":{"start":{"line":77,"column":12},"end":{"line":77,"column":38}},"35":{"start":{"line":79,"column":12},"end":{"line":79,"column":33}},"36":{"start":{"line":82,"column":8},"end":{"line":87,"column":9}},"37":{"start":{"line":83,"column":12},"end":{"line":83,"column":35}},"38":{"start":{"line":84,"column":12},"end":{"line":84,"column":38}},"39":{"start":{"line":86,"column":12},"end":{"line":86,"column":33}},"40":{"start":{"line":89,"column":8},"end":{"line":93,"column":9}},"41":{"start":{"line":90,"column":12},"end":{"line":90,"column":44}},"42":{"start":{"line":91,"column":12},"end":{"line":91,"column":39}},"43":{"start":{"line":92,"column":12},"end":{"line":92,"column":39}},"44":{"start":{"line":95,"column":8},"end":{"line":96,"column":37}},"45":{"start":{"line":96,"column":12},"end":{"line":96,"column":37}},"46":{"start":{"line":97,"column":8},"end":{"line":98,"column":37}},"47":{"start":{"line":98,"column":12},"end":{"line":98,"column":37}},"48":{"start":{"line":99,"column":8},"end":{"line":99,"column":22}},"49":{"start":{"line":100,"column":8},"end":{"line":100,"column":32}},"50":{"start":{"line":103,"column":0},"end":{"line":103,"column":32}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":10,"column":4},"end":{"line":10,"column":5}},"loc":{"start":{"line":10,"column":18},"end":{"line":14,"column":5}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":20,"column":4},"end":{"line":20,"column":5}},"loc":{"start":{"line":20,"column":15},"end":{"line":35,"column":5}},"line":20},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":4},"end":{"line":39,"column":5}},"loc":{"start":{"line":39,"column":19},"end":{"line":43,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":47,"column":4},"end":{"line":47,"column":5}},"loc":{"start":{"line":47,"column":18},"end":{"line":60,"column":5}},"line":47},"4":{"name":"(anonymous_4)","decl":{"start":{"line":66,"column":4},"end":{"line":66,"column":5}},"loc":{"start":{"line":66,"column":18},"end":{"line":101,"column":5}},"line":66}},"branchMap":{"0":{"loc":{"start":{"line":23,"column":8},"end":{"line":28,"column":9}},"type":"if","locations":[{"start":{"line":23,"column":8},"end":{"line":28,"column":9}},{"start":{"line":23,"column":8},"end":{"line":28,"column":9}}],"line":23},"1":{"loc":{"start":{"line":41,"column":8},"end":{"line":42,"column":30}},"type":"if","locations":[{"start":{"line":41,"column":8},"end":{"line":42,"column":30}},{"start":{"line":41,"column":8},"end":{"line":42,"column":30}}],"line":41},"2":{"loc":{"start":{"line":49,"column":8},"end":{"line":51,"column":9}},"type":"if","locations":[{"start":{"line":49,"column":8},"end":{"line":51,"column":9}},{"start":{"line":49,"column":8},"end":{"line":51,"column":9}}],"line":49},"3":{"loc":{"start":{"line":49,"column":12},"end":{"line":49,"column":44}},"type":"binary-expr","locations":[{"start":{"line":49,"column":12},"end":{"line":49,"column":21}},{"start":{"line":49,"column":25},"end":{"line":49,"column":44}}],"line":49},"4":{"loc":{"start":{"line":68,"column":8},"end":{"line":70,"column":9}},"type":"if","locations":[{"start":{"line":68,"column":8},"end":{"line":70,"column":9}},{"start":{"line":68,"column":8},"end":{"line":70,"column":9}}],"line":68},"5":{"loc":{"start":{"line":68,"column":12},"end":{"line":68,"column":44}},"type":"binary-expr","locations":[{"start":{"line":68,"column":12},"end":{"line":68,"column":21}},{"start":{"line":68,"column":25},"end":{"line":68,"column":44}}],"line":68},"6":{"loc":{"start":{"line":75,"column":8},"end":{"line":80,"column":9}},"type":"if","locations":[{"start":{"line":75,"column":8},"end":{"line":80,"column":9}},{"start":{"line":75,"column":8},"end":{"line":80,"column":9}}],"line":75},"7":{"loc":{"start":{"line":82,"column":8},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":82,"column":8},"end":{"line":87,"column":9}},{"start":{"line":82,"column":8},"end":{"line":87,"column":9}}],"line":82},"8":{"loc":{"start":{"line":89,"column":8},"end":{"line":93,"column":9}},"type":"if","locations":[{"start":{"line":89,"column":8},"end":{"line":93,"column":9}},{"start":{"line":89,"column":8},"end":{"line":93,"column":9}}],"line":89},"9":{"loc":{"start":{"line":95,"column":8},"end":{"line":96,"column":37}},"type":"if","locations":[{"start":{"line":95,"column":8},"end":{"line":96,"column":37}},{"start":{"line":95,"column":8},"end":{"line":96,"column":37}}],"line":95},"10":{"loc":{"start":{"line":97,"column":8},"end":{"line":98,"column":37}},"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":98,"column":37}},{"start":{"line":97,"column":8},"end":{"line":98,"column":37}}],"line":97}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/LinkedList.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/LinkedList.ts"],"names":[],"mappings":"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","sourcesContent":["import { LinkedListNode } from './LinkedListNode';\n\n/**\n * Implementation of a doubly linked-list that maintains both head and tail.\n * Tail maintenance allows for O(1) insertions at tail\n */\nexport class LinkedList<T> {\n  public length = 0;\n  public head: LinkedListNode<T> = null;\n  public tail: LinkedListNode<T> = null;\n\n  /**\n   * Adds a node to the end of a linked List\n   * @param T value\n   * @returns {LinkedListNode}\n   */\n  public add(value: T) {\n    const node = new LinkedListNode(value);\n\n    // when empty list\n    if (!this.head) {\n      this.head = node;\n      this.tail = node;\n      this.length++;\n      return node;\n    }\n\n    // non-empty, append to tail\n    node.prev = this.tail;\n    this.tail.next = node;\n    this.tail = node;\n    this.length++;\n    return node;\n  }\n\n  /**\n   * Finds the node at a specific position\n   */\n  public valueAt(index: number): T {\n    const node = this.nodeAt(index);\n    if (node) return node.value;\n  }\n\n  /**\n   * Finds the node for the index or throws an out of range exception\n   */\n  public nodeAt(index: number): LinkedListNode<T> {\n    // error when index out of range\n    if (index < 0 || index > this.length) {\n      throw new RangeError('Index out of range');\n    }\n\n    // seek until index is found\n    let currentNode = this.head;\n    let count = 0;\n    while (count < index) {\n      currentNode = currentNode.next;\n      count++;\n    }\n\n    return currentNode;\n  }\n\n  /**\n   * Removes the node at the index and returns its value.\n   * Head or tail removal is an O(1) operation. For removal of other indexes\n   * is at worst O(N).\n   */\n  public remove(index: number): T {\n    // error when index out of range\n    if (index < 0 || index > this.length) {\n      throw new RangeError('Index out of range');\n    }\n\n    let removeNode;\n    let prevNode = null;\n    let nextNode = null;\n\n    // first node simply removes the node at the tip\n    if (index === 0) {\n      removeNode = this.head;\n      nextNode = this.head.next;\n\n      // adjust head\n      this.head = nextNode;\n    }\n\n    // last node, update the tail and mark next as null\n    if (index === this.length - 1) {\n      removeNode = this.tail;\n      prevNode = this.tail.prev;\n\n      // adjust tail\n      this.tail = prevNode;\n    }\n\n    // middle node\n    if (!removeNode) {\n      removeNode = this.nodeAt(index);\n      prevNode = removeNode.prev;\n      nextNode = removeNode.next;\n    }\n\n    // splice out the node afer null checking\n    if (prevNode) prevNode.next = nextNode;\n    if (nextNode) nextNode.prev = prevNode;\n    this.length--;\n\n    return removeNode.value;\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"9ccb346173a0c17608450460441680ef197152db","contentHash":"b0be1c73cd6b055ea373d084bdf313d7a1d6ec08197a4f499c3802a89b0d4577"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/LinkedListNode.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/LinkedListNode.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":32}},"2":{"start":{"line":9,"column":8},"end":{"line":9,"column":27}},"3":{"start":{"line":10,"column":8},"end":{"line":10,"column":25}},"4":{"start":{"line":11,"column":8},"end":{"line":11,"column":25}},"5":{"start":{"line":14,"column":0},"end":{"line":14,"column":40}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":8,"column":4},"end":{"line":8,"column":5}},"loc":{"start":{"line":8,"column":23},"end":{"line":12,"column":5}},"line":8}},"branchMap":{},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":1},"f":{"0":0},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/LinkedListNode.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/LinkedListNode.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IAKzB;;OAEG;IACH,YAAY,KAAQ;QAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAbD,wCAaC","sourcesContent":["export class LinkedListNode<T> {\n  public value: T;\n  public prev: LinkedListNode<T>;\n  public next: LinkedListNode<T>;\n\n  /**\n   * Creates a linked list node with the specified data\n   */\n  constructor(value: T) {\n    this.value = value;\n    this.prev = null;\n    this.next = null;\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"1800b3225efa38f7ee6ec8565071c6030c31b387","contentHash":"a3098549f5a62c093f319717fb16fce860f6cf90f60dea8b6106ca3c01342c0f"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/Base32.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/Base32.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"2":{"start":{"line":5,"column":15},"end":{"line":5,"column":42}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":109}},"4":{"start":{"line":6,"column":80},"end":{"line":6,"column":103}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":66},"end":{"line":6,"column":67}},"loc":{"start":{"line":6,"column":78},"end":{"line":6,"column":105}},"line":6}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":0},"f":{"0":0},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/Base32.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/Base32.ts"],"names":[],"mappings":";;;AAAA,0EAA0E;AAC1E,2CAA0C;AAAjC,gGAAA,MAAM,OAAA","sourcesContent":["// Re-export Base32 from common package to maintain backward compatibility\nexport { Base32 } from '@node-dlc/common';\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"a8263ba3928d0b00fc3eee76b6189c58047fe609","contentHash":"8538db3396f236803eb2c43937b08f2d5ac4c9915b470ff52842778111b936ae"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/BigIntUtils.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/BigIntUtils.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":52}},"2":{"start":{"line":5,"column":15},"end":{"line":5,"column":42}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":115}},"4":{"start":{"line":6,"column":83},"end":{"line":6,"column":109}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":125}},"6":{"start":{"line":7,"column":88},"end":{"line":7,"column":119}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":69},"end":{"line":6,"column":70}},"loc":{"start":{"line":6,"column":81},"end":{"line":6,"column":111}},"line":6},"1":{"name":"(anonymous_1)","decl":{"start":{"line":7,"column":74},"end":{"line":7,"column":75}},"loc":{"start":{"line":7,"column":86},"end":{"line":7,"column":121}},"line":7}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0},"f":{"0":0,"1":0},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/BigIntUtils.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/BigIntUtils.ts"],"names":[],"mappings":";;;AAAA,yFAAyF;AACzF,2CAA6D;AAApD,mGAAA,SAAS,OAAA;AAAE,wGAAA,cAAc,OAAA","sourcesContent":["// Re-export BigIntUtils functions from common package to maintain backward compatibility\nexport { calcBytes, bigintToBuffer } from '@node-dlc/common';\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"704a7b52ee08ee2f40cab401136bf16cb79ebe7c","contentHash":"1166ff7963b7cb502b168cab9061c887ff940dc4b88b574d64ee3ae7c490b9a9"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/BitField.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/BitField.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"2":{"start":{"line":5,"column":15},"end":{"line":5,"column":42}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":113}},"4":{"start":{"line":6,"column":82},"end":{"line":6,"column":107}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":68},"end":{"line":6,"column":69}},"loc":{"start":{"line":6,"column":80},"end":{"line":6,"column":109}},"line":6}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":0},"f":{"0":0},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/BitField.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/BitField.ts"],"names":[],"mappings":";;;AAAA,4EAA4E;AAC5E,2CAA4C;AAAnC,kGAAA,QAAQ,OAAA","sourcesContent":["// Re-export BitField from common package to maintain backward compatibility\nexport { BitField } from '@node-dlc/common';\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"17d3ef1cf75c6bec520a0aa408da525d82c81c88","contentHash":"994cc4c668219be5b3826be79f7b157442a2d97a880b168be3abf55fc7d74147"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ChannelId.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ChannelId.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":27}},"2":{"start":{"line":5,"column":15},"end":{"line":5,"column":42}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":115}},"4":{"start":{"line":6,"column":83},"end":{"line":6,"column":109}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":69},"end":{"line":6,"column":70}},"loc":{"start":{"line":6,"column":81},"end":{"line":6,"column":111}},"line":6}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":0},"f":{"0":0},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ChannelId.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ChannelId.ts"],"names":[],"mappings":";;;AAAA,6EAA6E;AAC7E,2CAA6C;AAApC,mGAAA,SAAS,OAAA","sourcesContent":["// Re-export ChannelId from common package to maintain backward compatibility\nexport { ChannelId } from '@node-dlc/common';\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"6380df94f73429e600dda6c5271dd11c4334e31f","contentHash":"0b9ef7d79339d542b4c2a96f44a35005c6a0819084218357d01f43ec8dab877f"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ShortChannelId.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ShortChannelId.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":32}},"2":{"start":{"line":5,"column":15},"end":{"line":5,"column":42}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":125}},"4":{"start":{"line":6,"column":88},"end":{"line":6,"column":119}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":74},"end":{"line":6,"column":75}},"loc":{"start":{"line":6,"column":86},"end":{"line":6,"column":121}},"line":6}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":0},"f":{"0":0},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ShortChannelId.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ShortChannelId.ts"],"names":[],"mappings":";;;AAAA,kFAAkF;AAClF,2CAAkD;AAAzC,wGAAA,cAAc,OAAA","sourcesContent":["// Re-export ShortChannelId from common package to maintain backward compatibility\nexport { ShortChannelId } from '@node-dlc/common';\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"a56922097b1255b2d32bdc5f0c6bfa57ef103a50","contentHash":"37d1c01dafea31d902882f4fbb88b25f385e8c676b3370a6bb8525bd4f0811bd"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ShortChannelIdUtils.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ShortChannelIdUtils.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":211}},"2":{"start":{"line":5,"column":15},"end":{"line":5,"column":42}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":141}},"4":{"start":{"line":6,"column":96},"end":{"line":6,"column":135}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":141}},"6":{"start":{"line":7,"column":96},"end":{"line":7,"column":135}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":145}},"8":{"start":{"line":8,"column":98},"end":{"line":8,"column":139}},"9":{"start":{"line":9,"column":0},"end":{"line":9,"column":145}},"10":{"start":{"line":9,"column":98},"end":{"line":9,"column":139}},"11":{"start":{"line":10,"column":0},"end":{"line":10,"column":145}},"12":{"start":{"line":10,"column":98},"end":{"line":10,"column":139}},"13":{"start":{"line":11,"column":0},"end":{"line":11,"column":141}},"14":{"start":{"line":11,"column":96},"end":{"line":11,"column":135}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":82},"end":{"line":6,"column":83}},"loc":{"start":{"line":6,"column":94},"end":{"line":6,"column":137}},"line":6},"1":{"name":"(anonymous_1)","decl":{"start":{"line":7,"column":82},"end":{"line":7,"column":83}},"loc":{"start":{"line":7,"column":94},"end":{"line":7,"column":137}},"line":7},"2":{"name":"(anonymous_2)","decl":{"start":{"line":8,"column":84},"end":{"line":8,"column":85}},"loc":{"start":{"line":8,"column":96},"end":{"line":8,"column":141}},"line":8},"3":{"name":"(anonymous_3)","decl":{"start":{"line":9,"column":84},"end":{"line":9,"column":85}},"loc":{"start":{"line":9,"column":96},"end":{"line":9,"column":141}},"line":9},"4":{"name":"(anonymous_4)","decl":{"start":{"line":10,"column":84},"end":{"line":10,"column":85}},"loc":{"start":{"line":10,"column":96},"end":{"line":10,"column":141}},"line":10},"5":{"name":"(anonymous_5)","decl":{"start":{"line":11,"column":82},"end":{"line":11,"column":83}},"loc":{"start":{"line":11,"column":94},"end":{"line":11,"column":137}},"line":11}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0,"7":1,"8":0,"9":1,"10":0,"11":1,"12":0,"13":1,"14":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ShortChannelIdUtils.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/ShortChannelIdUtils.ts"],"names":[],"mappings":";;;AAAA,4FAA4F;AAC5F,2CAO0B;AANxB,gHAAA,sBAAsB,OAAA;AACtB,gHAAA,sBAAsB,OAAA;AACtB,kHAAA,wBAAwB,OAAA;AACxB,kHAAA,wBAAwB,OAAA;AACxB,kHAAA,wBAAwB,OAAA;AACxB,gHAAA,sBAAsB,OAAA","sourcesContent":["// Re-export ShortChannelId utilities from common package to maintain backward compatibility\nexport {\n  shortChannelIdToBuffer,\n  shortChannelIdToNumber,\n  shortChannelIdFromString,\n  shortChannelIdFromBuffer,\n  shortChannelIdFromNumber,\n  shortChannelIdToString,\n} from '@node-dlc/common';\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"740b42e735b2c8e63353c7650871d66a20d785b7","contentHash":"53141809f4cb1f11ace46897ef166d3a95612c2f9cb0e584ce90cdb5a9708ef6"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ChannelId.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ChannelId.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":27}},"2":{"start":{"line":4,"column":18},"end":{"line":4,"column":46}},"3":{"start":{"line":14,"column":21},"end":{"line":14,"column":73}},"4":{"start":{"line":15,"column":8},"end":{"line":17,"column":9}},"5":{"start":{"line":16,"column":12},"end":{"line":16,"column":59}},"6":{"start":{"line":18,"column":8},"end":{"line":18,"column":46}},"7":{"start":{"line":19,"column":8},"end":{"line":19,"column":48}},"8":{"start":{"line":20,"column":8},"end":{"line":20,"column":35}},"9":{"start":{"line":23,"column":8},"end":{"line":23,"column":27}},"10":{"start":{"line":29,"column":8},"end":{"line":29,"column":39}},"11":{"start":{"line":35,"column":8},"end":{"line":35,"column":28}},"12":{"start":{"line":41,"column":8},"end":{"line":41,"column":42}},"13":{"start":{"line":48,"column":8},"end":{"line":48,"column":46}},"14":{"start":{"line":51,"column":0},"end":{"line":51,"column":30}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":13,"column":4},"end":{"line":13,"column":5}},"loc":{"start":{"line":13,"column":34},"end":{"line":21,"column":5}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":22,"column":4},"end":{"line":22,"column":5}},"loc":{"start":{"line":22,"column":23},"end":{"line":24,"column":5}},"line":22},"2":{"name":"(anonymous_2)","decl":{"start":{"line":28,"column":4},"end":{"line":28,"column":5}},"loc":{"start":{"line":28,"column":15},"end":{"line":30,"column":5}},"line":28},"3":{"name":"(anonymous_3)","decl":{"start":{"line":34,"column":4},"end":{"line":34,"column":5}},"loc":{"start":{"line":34,"column":15},"end":{"line":36,"column":5}},"line":34},"4":{"name":"(anonymous_4)","decl":{"start":{"line":40,"column":4},"end":{"line":40,"column":5}},"loc":{"start":{"line":40,"column":12},"end":{"line":42,"column":5}},"line":40},"5":{"name":"(anonymous_5)","decl":{"start":{"line":47,"column":4},"end":{"line":47,"column":5}},"loc":{"start":{"line":47,"column":18},"end":{"line":49,"column":5}},"line":47}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":8},"end":{"line":17,"column":9}},"type":"if","locations":[{"start":{"line":15,"column":8},"end":{"line":17,"column":9}},{"start":{"line":15,"column":8},"end":{"line":17,"column":9}}],"line":15}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},"b":{"0":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ChannelId.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ChannelId.ts"],"names":[],"mappings":";;;AAAA,+CAA4D;AAE5D;;;;;;GAMG;AACH,MAAa,SAAS;IACb,MAAM,CAAC,YAAY,CAAC,QAAkB;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,uBAAa,CAAC,GAAG,CAAC,CAAC;QAExD,IAAI,QAAQ,CAAC,WAAW,GAAG,MAAM,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAChD;QAED,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;QAExC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,YAAqB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAEtC;;OAEG;IACI,QAAQ;QACb,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,KAAK;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAgB;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;CACF;AA5CD,8BA4CC","sourcesContent":["import { HashByteOrder, OutPoint } from '@node-dlc/bitcoin';\n\n/**\n * ChannelId type that that encapsulates an outpoint as a 32-byte value\n * and is used to identify a channel. This type is defined in BOLT 2\n * under the peer protocol. It is defined as combinging the funding_txid\n * and the funding_output_index, using big-endian XOR (meaning the\n * output_index modifies the last two bytes).\n */\nexport class ChannelId {\n  public static fromOutPoint(outpoint: OutPoint): ChannelId {\n    const txid = outpoint.txid.serialize(HashByteOrder.RPC);\n\n    if (outpoint.outputIndex > 0xffff) {\n      throw new Error('Invalid output index length');\n    }\n\n    txid[30] ^= outpoint.outputIndex >> 8;\n    txid[31] ^= outpoint.outputIndex & 0xff;\n\n    return new ChannelId(txid);\n  }\n\n  constructor(readonly value: Buffer) {}\n\n  /**\n   * Converts the ChannelId into a buffer\n   */\n  public toBuffer(): Buffer {\n    return Buffer.from(this.value);\n  }\n\n  /**\n   * Converts the ChannelId into a hex-encoded string\n   */\n  public toString(): string {\n    return this.toHex();\n  }\n\n  /**\n   * Converts the ChannelId to a hex-encoded string\n   */\n  public toHex(): string {\n    return this.value.toString('hex');\n  }\n\n  /**\n   * Returns true if the ChannelIds are byte-wise equal\n   * @param other\n   */\n  public equals(other: ChannelId): boolean {\n    return this.value.equals(other.value);\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"0649947ec647a6fb533c36b3e80c2c4843aa360b","contentHash":"7fe23fbfe7c4afc5d949d394c0be2e7f2d340860f74721eeb043ab9b814cee78"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ChannelKeys.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ChannelKeys.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":12,"column":3}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":33}},"2":{"start":{"line":3,"column":26},"end":{"line":3,"column":33}},"3":{"start":{"line":4,"column":15},"end":{"line":4,"column":52}},"4":{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},"5":{"start":{"line":6,"column":6},"end":{"line":6,"column":68}},"6":{"start":{"line":6,"column":51},"end":{"line":6,"column":63}},"7":{"start":{"line":8,"column":4},"end":{"line":8,"column":39}},"8":{"start":{"line":10,"column":4},"end":{"line":10,"column":33}},"9":{"start":{"line":10,"column":26},"end":{"line":10,"column":33}},"10":{"start":{"line":11,"column":4},"end":{"line":11,"column":17}},"11":{"start":{"line":13,"column":25},"end":{"line":17,"column":2}},"12":{"start":{"line":14,"column":4},"end":{"line":14,"column":72}},"13":{"start":{"line":16,"column":4},"end":{"line":16,"column":21}},"14":{"start":{"line":18,"column":19},"end":{"line":24,"column":1}},"15":{"start":{"line":19,"column":4},"end":{"line":19,"column":42}},"16":{"start":{"line":19,"column":31},"end":{"line":19,"column":42}},"17":{"start":{"line":20,"column":17},"end":{"line":20,"column":19}},"18":{"start":{"line":21,"column":4},"end":{"line":21,"column":141}},"19":{"start":{"line":21,"column":21},"end":{"line":21,"column":141}},"20":{"start":{"line":21,"column":40},"end":{"line":21,"column":141}},"21":{"start":{"line":21,"column":109},"end":{"line":21,"column":141}},"22":{"start":{"line":22,"column":4},"end":{"line":22,"column":36}},"23":{"start":{"line":23,"column":4},"end":{"line":23,"column":18}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":62}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":29}},"26":{"start":{"line":27,"column":15},"end":{"line":27,"column":56}},"27":{"start":{"line":41,"column":22},"end":{"line":41,"column":83}},"28":{"start":{"line":42,"column":8},"end":{"line":42,"column":64}},"29":{"start":{"line":59,"column":26},"end":{"line":59,"column":68}},"30":{"start":{"line":60,"column":22},"end":{"line":60,"column":83}},"31":{"start":{"line":61,"column":8},"end":{"line":61,"column":65}},"32":{"start":{"line":76,"column":23},"end":{"line":76,"column":84}},"33":{"start":{"line":77,"column":18},"end":{"line":77,"column":67}},"34":{"start":{"line":78,"column":23},"end":{"line":78,"column":84}},"35":{"start":{"line":79,"column":18},"end":{"line":79,"column":76}},"36":{"start":{"line":80,"column":8},"end":{"line":80,"column":53}},"37":{"start":{"line":94,"column":26},"end":{"line":94,"column":68}},"38":{"start":{"line":95,"column":35},"end":{"line":95,"column":86}},"39":{"start":{"line":96,"column":23},"end":{"line":96,"column":84}},"40":{"start":{"line":97,"column":18},"end":{"line":97,"column":68}},"41":{"start":{"line":98,"column":23},"end":{"line":98,"column":84}},"42":{"start":{"line":99,"column":18},"end":{"line":99,"column":77}},"43":{"start":{"line":100,"column":23},"end":{"line":100,"column":54}},"44":{"start":{"line":101,"column":8},"end":{"line":101,"column":22}},"45":{"start":{"line":104,"column":0},"end":{"line":104,"column":34}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":74},"end":{"line":2,"column":75}},"loc":{"start":{"line":2,"column":96},"end":{"line":9,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":6,"column":38},"end":{"line":6,"column":39}},"loc":{"start":{"line":6,"column":49},"end":{"line":6,"column":65}},"line":6},"2":{"name":"(anonymous_2)","decl":{"start":{"line":9,"column":6},"end":{"line":9,"column":7}},"loc":{"start":{"line":9,"column":28},"end":{"line":12,"column":1}},"line":9},"3":{"name":"(anonymous_3)","decl":{"start":{"line":13,"column":80},"end":{"line":13,"column":81}},"loc":{"start":{"line":13,"column":95},"end":{"line":15,"column":1}},"line":13},"4":{"name":"(anonymous_4)","decl":{"start":{"line":15,"column":5},"end":{"line":15,"column":6}},"loc":{"start":{"line":15,"column":20},"end":{"line":17,"column":1}},"line":15},"5":{"name":"(anonymous_5)","decl":{"start":{"line":18,"column":50},"end":{"line":18,"column":51}},"loc":{"start":{"line":18,"column":65},"end":{"line":24,"column":1}},"line":18},"6":{"name":"(anonymous_6)","decl":{"start":{"line":40,"column":4},"end":{"line":40,"column":5}},"loc":{"start":{"line":40,"column":55},"end":{"line":43,"column":5}},"line":40},"7":{"name":"(anonymous_7)","decl":{"start":{"line":58,"column":4},"end":{"line":58,"column":5}},"loc":{"start":{"line":58,"column":62},"end":{"line":62,"column":5}},"line":58},"8":{"name":"(anonymous_8)","decl":{"start":{"line":75,"column":4},"end":{"line":75,"column":5}},"loc":{"start":{"line":75,"column":65},"end":{"line":81,"column":5}},"line":75},"9":{"name":"(anonymous_9)","decl":{"start":{"line":93,"column":4},"end":{"line":93,"column":5}},"loc":{"start":{"line":93,"column":78},"end":{"line":102,"column":5}},"line":93}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":12,"column":3}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":57},"end":{"line":12,"column":2}}],"line":2},"1":{"loc":{"start":{"line":2,"column":57},"end":{"line":12,"column":2}},"type":"cond-expr","locations":[{"start":{"line":2,"column":74},"end":{"line":9,"column":1}},{"start":{"line":9,"column":6},"end":{"line":12,"column":1}}],"line":2},"2":{"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":33}},"type":"if","locations":[{"start":{"line":3,"column":4},"end":{"line":3,"column":33}},{"start":{"line":3,"column":4},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},"type":"if","locations":[{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},{"start":{"line":5,"column":4},"end":{"line":7,"column":5}}],"line":5},"4":{"loc":{"start":{"line":5,"column":8},"end":{"line":5,"column":85}},"type":"binary-expr","locations":[{"start":{"line":5,"column":8},"end":{"line":5,"column":13}},{"start":{"line":5,"column":18},"end":{"line":5,"column":84}}],"line":5},"5":{"loc":{"start":{"line":5,"column":18},"end":{"line":5,"column":84}},"type":"cond-expr","locations":[{"start":{"line":5,"column":34},"end":{"line":5,"column":47}},{"start":{"line":5,"column":50},"end":{"line":5,"column":84}}],"line":5},"6":{"loc":{"start":{"line":5,"column":50},"end":{"line":5,"column":84}},"type":"binary-expr","locations":[{"start":{"line":5,"column":50},"end":{"line":5,"column":63}},{"start":{"line":5,"column":67},"end":{"line":5,"column":84}}],"line":5},"7":{"loc":{"start":{"line":10,"column":4},"end":{"line":10,"column":33}},"type":"if","locations":[{"start":{"line":10,"column":4},"end":{"line":10,"column":33}},{"start":{"line":10,"column":4},"end":{"line":10,"column":33}}],"line":10},"8":{"loc":{"start":{"line":13,"column":25},"end":{"line":17,"column":2}},"type":"binary-expr","locations":[{"start":{"line":13,"column":26},"end":{"line":13,"column":30}},{"start":{"line":13,"column":34},"end":{"line":13,"column":57}},{"start":{"line":13,"column":63},"end":{"line":17,"column":1}}],"line":13},"9":{"loc":{"start":{"line":13,"column":63},"end":{"line":17,"column":1}},"type":"cond-expr","locations":[{"start":{"line":13,"column":80},"end":{"line":15,"column":1}},{"start":{"line":15,"column":5},"end":{"line":17,"column":1}}],"line":13},"10":{"loc":{"start":{"line":18,"column":19},"end":{"line":24,"column":1}},"type":"binary-expr","locations":[{"start":{"line":18,"column":20},"end":{"line":18,"column":24}},{"start":{"line":18,"column":28},"end":{"line":18,"column":45}},{"start":{"line":18,"column":50},"end":{"line":24,"column":1}}],"line":18},"11":{"loc":{"start":{"line":19,"column":4},"end":{"line":19,"column":42}},"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":19,"column":42}},{"start":{"line":19,"column":4},"end":{"line":19,"column":42}}],"line":19},"12":{"loc":{"start":{"line":19,"column":8},"end":{"line":19,"column":29}},"type":"binary-expr","locations":[{"start":{"line":19,"column":8},"end":{"line":19,"column":11}},{"start":{"line":19,"column":15},"end":{"line":19,"column":29}}],"line":19},"13":{"loc":{"start":{"line":21,"column":4},"end":{"line":21,"column":141}},"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":21,"column":141}},{"start":{"line":21,"column":4},"end":{"line":21,"column":141}}],"line":21},"14":{"loc":{"start":{"line":21,"column":40},"end":{"line":21,"column":141}},"type":"if","locations":[{"start":{"line":21,"column":40},"end":{"line":21,"column":141}},{"start":{"line":21,"column":40},"end":{"line":21,"column":141}}],"line":21},"15":{"loc":{"start":{"line":21,"column":44},"end":{"line":21,"column":107}},"type":"binary-expr","locations":[{"start":{"line":21,"column":44},"end":{"line":21,"column":59}},{"start":{"line":21,"column":63},"end":{"line":21,"column":107}}],"line":21}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":1,"26":1,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":1,"6":0,"7":0,"8":0,"9":0},"b":{"0":[1,1,1],"1":[1,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[1,1,1],"9":[1,0],"10":[1,1,1],"11":[1,0],"12":[1,1],"13":[0,0],"14":[0,0],"15":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ChannelKeys.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ChannelKeys.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2C;AAE3C,MAAa,WAAW;IACtB;;;;;;;;;;OAUG;IACI,MAAM,CAAC,YAAY,CACxB,kBAA0B,EAC1B,SAAiB;QAEjB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,aAAa,CACzB,kBAA0B,EAC1B,eAAuB;QAEvB,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,kBAAkB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;;;;;OAWG;IACI,MAAM,CAAC,sBAAsB,CAClC,kBAA0B,EAC1B,SAAiB;QAEjB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAC/C,CAAC;QACF,MAAM,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAC/C,CAAC;QACF,MAAM,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAErE,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,uBAAuB,CACnC,wBAAgC,EAChC,eAAuB;QAEvB,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC7D,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAC5C,wBAAwB,EACxB,IAAI,CACL,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAC/C,CAAC;QACF,MAAM,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAC/C,CAAC;QACF,MAAM,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;QAEtE,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA1GD,kCA0GC","sourcesContent":["import * as crypto from '@node-dlc/crypto';\n\nexport class ChannelKeys {\n  /**\n   * Derives a public key that can be used for local or remote\n   * pubkey, htlc_pubkey, or delayed_pubkey\n   *\n   * Derived via:\n   *  pubkey = basepoint + SHA256(per_commitment_point || basepoint) * G\n   *\n   * @param perCommitmentPoint 33-byte buffer\n   * @param basePoint 33-byte base point\n   * @returns 33-byte buffer\n   */\n  public static derivePubKey(\n    perCommitmentPoint: Buffer,\n    basePoint: Buffer,\n  ): Buffer {\n    const tweak = crypto.sha256(Buffer.concat([perCommitmentPoint, basePoint]));\n    return crypto.publicKeyTweakAdd(basePoint, tweak, true);\n  }\n\n  /**\n   * Derives the private keys based on local basepoint secrets and can\n   * be used to derive per-commitment\n   * - payment_scret\n   * - delayedpayment_secret\n   * - htlc_secret\n   *\n   * Derived via:\n   *  privkey = basepoint_secret + SHA256(per_commitment_point || basepoint)\n   *\n   * @param perCommitmentPoint 32-byte buffer\n   * @param basePointSecret 32-byte buffer\n   * @return 32-byte buffer\n   */\n  public static derivePrivKey(\n    perCommitmentPoint: Buffer,\n    basePointSecret: Buffer,\n  ): Buffer {\n    const basePoint = crypto.getPublicKey(basePointSecret, true);\n    const tweak = crypto.sha256(Buffer.concat([perCommitmentPoint, basePoint]));\n    return crypto.privateKeyTweakAdd(basePointSecret, tweak);\n  }\n\n  /**\n   * Derives the revocationpubkey blinded key for either local or\n   * remote revocation pubkey generation.\n   *\n   * Derived via:\n   *  revocationpubkey = revocation_basepoint * SHA256(revocation_basepoint || per_commitment_point) +\n   *                     per_commitment_point * SHA256(per_commitment_point || revocation_basepoint)\n   *\n   * @param perCommitmentPoint 33-byte buffer\n   * @param basePoint 33-byte buffer\n   * @returns 33-byte buffer\n   */\n  public static deriveRevocationPubKey(\n    perCommitmentPoint: Buffer,\n    basePoint: Buffer,\n  ): Buffer {\n    const tweakA = crypto.sha256(\n      Buffer.concat([basePoint, perCommitmentPoint]),\n    );\n    const a = crypto.publicKeyTweakMul(basePoint, tweakA, true);\n\n    const tweakB = crypto.sha256(\n      Buffer.concat([perCommitmentPoint, basePoint]),\n    );\n    const b = crypto.publicKeyTweakMul(perCommitmentPoint, tweakB, true);\n\n    return crypto.publicKeyCombine([a, b], true);\n  }\n\n  /**\n   * Derives the revocationprivkey which is used by the local node\n   * and with a per_commitment_secret that was revealed by the\n   * counterparty.\n   *\n   * Derived via:\n   * revocationprivkey = revocation_basepoint_secret * SHA256(revocation_basepoint || per_commitment_point) +\n   *                     per_commitment_secret * SHA256(per_commitment_point || revocation_basepoint)\n   * @param perCommitmentPointSecret 32-byte buffer\n   * @param basePointSecret 32-byte buffer\n   */\n  public static deriveRevocationPrivKey(\n    perCommitmentPointSecret: Buffer,\n    basePointSecret: Buffer,\n  ): Buffer {\n    const basePoint = crypto.getPublicKey(basePointSecret, true);\n    const perCommitmentPoint = crypto.getPublicKey(\n      perCommitmentPointSecret,\n      true,\n    );\n\n    const tweakA = crypto.sha256(\n      Buffer.concat([basePoint, perCommitmentPoint]),\n    );\n    const a = crypto.privateKeyTweakMul(basePointSecret, tweakA);\n\n    const tweakB = crypto.sha256(\n      Buffer.concat([perCommitmentPoint, basePoint]),\n    );\n    const b = crypto.privateKeyTweakMul(perCommitmentPointSecret, tweakB);\n\n    const result = crypto.privateKeyTweakAdd(a, b);\n    return result;\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"81cb9723609101dd21b4011a998661131b50ba12","contentHash":"fe56d548edfadf0151401df860580607fb527f1b8a0d215ba66c502a5b616751"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentNumber.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentNumber.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"2":{"start":{"line":4,"column":18},"end":{"line":4,"column":46}},"3":{"start":{"line":5,"column":16},"end":{"line":5,"column":42}},"4":{"start":{"line":6,"column":17},"end":{"line":6,"column":44}},"5":{"start":{"line":19,"column":8},"end":{"line":19,"column":104}},"6":{"start":{"line":32,"column":8},"end":{"line":32,"column":109}},"7":{"start":{"line":43,"column":21},"end":{"line":43,"column":77}},"8":{"start":{"line":44,"column":22},"end":{"line":44,"column":69}},"9":{"start":{"line":45,"column":22},"end":{"line":45,"column":55}},"10":{"start":{"line":46,"column":8},"end":{"line":46,"column":46}},"11":{"start":{"line":61,"column":8},"end":{"line":62,"column":32}},"12":{"start":{"line":71,"column":21},"end":{"line":71,"column":90}},"13":{"start":{"line":72,"column":8},"end":{"line":72,"column":70}},"14":{"start":{"line":75,"column":0},"end":{"line":75,"column":44}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":18,"column":4},"end":{"line":18,"column":5}},"loc":{"start":{"line":18,"column":34},"end":{"line":20,"column":5}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":31,"column":4},"end":{"line":31,"column":5}},"loc":{"start":{"line":31,"column":34},"end":{"line":33,"column":5}},"line":31},"2":{"name":"(anonymous_2)","decl":{"start":{"line":42,"column":4},"end":{"line":42,"column":5}},"loc":{"start":{"line":42,"column":70},"end":{"line":47,"column":5}},"line":42},"3":{"name":"(anonymous_3)","decl":{"start":{"line":60,"column":4},"end":{"line":60,"column":5}},"loc":{"start":{"line":60,"column":63},"end":{"line":63,"column":5}},"line":60},"4":{"name":"(anonymous_4)","decl":{"start":{"line":70,"column":4},"end":{"line":70,"column":5}},"loc":{"start":{"line":70,"column":51},"end":{"line":73,"column":5}},"line":70}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentNumber.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentNumber.ts"],"names":[],"mappings":";;;AAAA,+CAAuD;AACvD,2CAA+C;AAC/C,6CAA0C;AAE1C,MAAa,gBAAgB;IAC3B;;;;;;;;;OASG;IACI,MAAM,CAAC,WAAW,CAAC,SAAiB;QACzC,OAAO,IAAI,kBAAQ,CACjB,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CACjE,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACI,MAAM,CAAC,WAAW,CAAC,SAAiB;QACzC,OAAO,IAAI,kBAAQ,CACjB,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CACtE,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,MAAM,CAClB,QAAkB,EAClB,QAAkB,EAClB,aAAqB,EACrB,eAAuB;QAEvB,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;;;;OAWG;IACI,MAAM,CAAC,OAAO,CACnB,UAAkB,EAClB,aAAqB,EACrB,eAAuB;QAEvB,OAAO,CACL,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC;YACxD,MAAM,CAAC,UAAU,CAAC,CACnB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,OAAO,CACpB,aAAqB,EACrB,eAAuB;QAEvB,MAAM,IAAI,GAAG,IAAA,eAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,IAAA,oBAAY,EAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;CACF;AAzFD,4CAyFC","sourcesContent":["import { LockTime, Sequence } from '@node-dlc/bitcoin';\nimport { bigFromBufBE } from '@node-dlc/bufio';\nimport { sha256 } from '@node-dlc/crypto';\n\nexport class CommitmentNumber {\n  /**\n   * Using the obscured commitment number, creates a Sequence with\n   * the upper byte set to 0x80 and the lower three bytes set to the\n   * upper 3 bytes of the 48-bit commitment number.\n   *\n   * The upper most byte is set to 0x80 so that the relative lock time\n   * is disabled.\n   *\n   * @param commitment commitment number to obscure\n   */\n  public static getSequence(obscurred: bigint): Sequence {\n    return new Sequence(\n      Number((BigInt(0x80) << BigInt(24)) | (obscurred >> BigInt(24))),\n    );\n  }\n\n  /**\n   * Using the obscured commitment number, creates a LockTime with\n   * the upper byte set to 0x20 and the lower three bytes set to the\n   * lower 3 bytes of the 48-bit commitment number.\n   *\n   * The uppermost byte is set to 0x20 so the LockTime uses a time\n   * based absolute locktime that has already expired.\n   *\n   * @param obscurred obscurred commitment number\n   */\n  public static getLockTime(obscurred: bigint): LockTime {\n    return new LockTime(\n      Number((BigInt(0x20) << BigInt(24)) | (obscurred & BigInt(0xffffff))),\n    );\n  }\n\n  /**\n   * Reveals the commitment number provided by the nSequence and\n   * nLockTime values. This function reverses the obscurring using the\n   * known payment base points.\n   *\n   * @param locktime\n   * @param sequence\n   */\n  public static reveal(\n    locktime: LockTime,\n    sequence: Sequence,\n    openBasePoint: Buffer,\n    acceptBasePoint: Buffer,\n  ): number {\n    const hash = CommitmentNumber.getHash(openBasePoint, acceptBasePoint);\n    const upper = BigInt(sequence.value & 0xffffff) << BigInt(24);\n    const lower = BigInt(locktime.value & 0xffffff);\n    return Number(hash ^ (upper | lower));\n  }\n\n  /**\n   * Defined in BOLT3, the obscurred commitment number is attached to the\n   * commitment transaction. The 48-bit commitment number is broken into\n   * two pieces, the lower 3-bytes are obscured in nLocketime and the\n   * upper 3-bytes are obscured in the funding input's nSequence.\n   *\n   * The obscurred commitment number is calculated as the:\n   * sha256(open_channel payment_basepoint || accept_channel payment_basepoint) ^ commitment_number\n   * @param commitment\n   * @param openBasePoint\n   * @param acceptBasePoint\n   */\n  public static obscure(\n    commitment: number,\n    openBasePoint: Buffer,\n    acceptBasePoint: Buffer,\n  ): bigint {\n    return (\n      CommitmentNumber.getHash(openBasePoint, acceptBasePoint) ^\n      BigInt(commitment)\n    );\n  }\n\n  /**\n   * Obtains the lower 6-bytes from the sha256 of the open_channel\n   * basepoint and the accept_channel basepoint.\n   * @param openBasePoint\n   * @param acceptBasePoint\n   */\n  private static getHash(\n    openBasePoint: Buffer,\n    acceptBasePoint: Buffer,\n  ): bigint {\n    const hash = sha256(Buffer.concat([openBasePoint, acceptBasePoint]));\n    return bigFromBufBE(hash.slice(hash.length - 6));\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"87ab3a48dc87cc5f281983cf26f3d3797b99ec86","contentHash":"d64a207e1af92cbdd1cd39237bae81b7434605dc92205e51c51a4eacf4f2e32f"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentSecret.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentSecret.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"2":{"start":{"line":4,"column":17},"end":{"line":4,"column":44}},"3":{"start":{"line":30,"column":16},"end":{"line":30,"column":33}},"4":{"start":{"line":31,"column":8},"end":{"line":39,"column":9}},"5":{"start":{"line":31,"column":21},"end":{"line":31,"column":29}},"6":{"start":{"line":32,"column":12},"end":{"line":38,"column":13}},"7":{"start":{"line":34,"column":34},"end":{"line":34,"column":51}},"8":{"start":{"line":35,"column":33},"end":{"line":35,"column":38}},"9":{"start":{"line":36,"column":16},"end":{"line":36,"column":62}},"10":{"start":{"line":37,"column":16},"end":{"line":37,"column":44}},"11":{"start":{"line":40,"column":8},"end":{"line":40,"column":17}},"12":{"start":{"line":43,"column":0},"end":{"line":43,"column":44}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":28,"column":4},"end":{"line":28,"column":5}},"loc":{"start":{"line":28,"column":38},"end":{"line":41,"column":5}},"line":28}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":27},"end":{"line":28,"column":36}},"type":"default-arg","locations":[{"start":{"line":28,"column":34},"end":{"line":28,"column":36}}],"line":28},"1":{"loc":{"start":{"line":32,"column":12},"end":{"line":38,"column":13}},"type":"if","locations":[{"start":{"line":32,"column":12},"end":{"line":38,"column":13}},{"start":{"line":32,"column":12},"end":{"line":38,"column":13}}],"line":32}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":1},"f":{"0":0},"b":{"0":[0],"1":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentSecret.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentSecret.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAE1C,MAAa,gBAAgB;IAC3B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,MAAM,CAAC,MAAM,CAAC,IAAY,EAAE,CAAS,EAAE,IAAI,GAAG,EAAE;QACrD,QAAQ;QACR,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1B,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBAChC,8CAA8C;gBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;gBAC9C,CAAC,GAAG,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC;aACf;SACF;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAtCD,4CAsCC","sourcesContent":["import { sha256 } from '@node-dlc/crypto';\n\nexport class CommitmentSecret {\n  /**\n   * Generic version of commitment secret generator as defined in\n   * BOLT3.\n   *\n   * This function works by decrementing from bits to 0. If the index\n   * number has the corresponding bit set, it flips the bit in the\n   * secret and hashes it.\n   *\n   * The natural conclusion is the first secret flips every bit and\n   * the last secret flips zero (and is thus the seed).\n   *\n   * This function can be used for generate the local per-commitment\n   * secret based on the per-commitment seed and a commitment index\n   * (in this case it) generates all 48 bits.\n   *\n   * This function can also be used to generate prior commitment\n   * secrets from a newer secret, which acts as a prefix.\n   *\n   * @param base base secret that will be used to derive from\n   * @param i secret at index I to generate\n   * @param bits bits to evaluate, default is 48\n   */\n  public static derive(base: Buffer, i: bigint, bits = 48): Buffer {\n    // intii\n    let p = Buffer.from(base);\n\n    for (let b = bits - 1; b >= 0; b--) {\n      if (i & (BigInt(1) << BigInt(b))) {\n        // flip the specified bit in the specific byte\n        const byteIndex = Math.floor(b / 8);\n        const bitIndex = b % 8;\n        p[byteIndex] = p[byteIndex] ^ (1 << bitIndex);\n        p = sha256(p);\n      }\n    }\n    return p;\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"34eb7d188080c41dec62beca484f2f87808ac2db","contentHash":"1631e84a17e31cfd16f1b2677959133c44e6f327c1ded182de2d4ddc17ed597d"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentSecretStore.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentSecretStore.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":39}},"2":{"start":{"line":4,"column":27},"end":{"line":4,"column":56}},"3":{"start":{"line":22,"column":8},"end":{"line":25,"column":9}},"4":{"start":{"line":22,"column":21},"end":{"line":22,"column":30}},"5":{"start":{"line":23,"column":12},"end":{"line":24,"column":33}},"6":{"start":{"line":24,"column":16},"end":{"line":24,"column":33}},"7":{"start":{"line":26,"column":8},"end":{"line":26,"column":18}},"8":{"start":{"line":29,"column":8},"end":{"line":29,"column":37}},"9":{"start":{"line":30,"column":8},"end":{"line":32,"column":9}},"10":{"start":{"line":30,"column":21},"end":{"line":30,"column":22}},"11":{"start":{"line":31,"column":12},"end":{"line":31,"column":70}},"12":{"start":{"line":43,"column":18},"end":{"line":43,"column":52}},"13":{"start":{"line":46,"column":8},"end":{"line":52,"column":9}},"14":{"start":{"line":46,"column":21},"end":{"line":46,"column":22}},"15":{"start":{"line":47,"column":29},"end":{"line":47,"column":51}},"16":{"start":{"line":48,"column":28},"end":{"line":48,"column":104}},"17":{"start":{"line":49,"column":12},"end":{"line":51,"column":13}},"18":{"start":{"line":50,"column":16},"end":{"line":50,"column":65}},"19":{"start":{"line":54,"column":8},"end":{"line":54,"column":42}},"20":{"start":{"line":55,"column":8},"end":{"line":55,"column":48}},"21":{"start":{"line":64,"column":8},"end":{"line":74,"column":9}},"22":{"start":{"line":64,"column":21},"end":{"line":64,"column":22}},"23":{"start":{"line":67,"column":25},"end":{"line":67,"column":75}},"24":{"start":{"line":71,"column":12},"end":{"line":73,"column":13}},"25":{"start":{"line":72,"column":16},"end":{"line":72,"column":96}},"26":{"start":{"line":75,"column":8},"end":{"line":75,"column":60}},"27":{"start":{"line":78,"column":0},"end":{"line":78,"column":54}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":21,"column":4},"end":{"line":21,"column":5}},"loc":{"start":{"line":21,"column":24},"end":{"line":27,"column":5}},"line":21},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":4},"end":{"line":28,"column":5}},"loc":{"start":{"line":28,"column":18},"end":{"line":33,"column":5}},"line":28},"2":{"name":"(anonymous_2)","decl":{"start":{"line":42,"column":4},"end":{"line":42,"column":5}},"loc":{"start":{"line":42,"column":22},"end":{"line":56,"column":5}},"line":42},"3":{"name":"(anonymous_3)","decl":{"start":{"line":63,"column":4},"end":{"line":63,"column":5}},"loc":{"start":{"line":63,"column":14},"end":{"line":76,"column":5}},"line":63}},"branchMap":{"0":{"loc":{"start":{"line":23,"column":12},"end":{"line":24,"column":33}},"type":"if","locations":[{"start":{"line":23,"column":12},"end":{"line":24,"column":33}},{"start":{"line":23,"column":12},"end":{"line":24,"column":33}}],"line":23},"1":{"loc":{"start":{"line":49,"column":12},"end":{"line":51,"column":13}},"type":"if","locations":[{"start":{"line":49,"column":12},"end":{"line":51,"column":13}},{"start":{"line":49,"column":12},"end":{"line":51,"column":13}}],"line":49},"2":{"loc":{"start":{"line":71,"column":12},"end":{"line":73,"column":13}},"type":"if","locations":[{"start":{"line":71,"column":12},"end":{"line":73,"column":13}},{"start":{"line":71,"column":12},"end":{"line":73,"column":13}}],"line":71},"3":{"loc":{"start":{"line":71,"column":16},"end":{"line":71,"column":78}},"type":"binary-expr","locations":[{"start":{"line":71,"column":16},"end":{"line":71,"column":52}},{"start":{"line":71,"column":56},"end":{"line":71,"column":78}}],"line":71}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":1},"f":{"0":0,"1":0,"2":0,"3":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentSecretStore.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/CommitmentSecretStore.ts"],"names":[],"mappings":";;;AAAA,yDAAsD;AAItD;;;;;;;;;GASG;AACH,MAAa,qBAAqB;IAChC;;;;OAIG;IACI,MAAM,CAAC,SAAS,CAAC,CAAS;QAC/B,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SAC5C;QACD,OAAO,EAAE,CAAC,CAAC,OAAO;IACpB,CAAC;IAID;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,CAAgC,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SAC3D;IACH,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,MAAc,EAAE,CAAS;QACrC,MAAM,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAE7C,+DAA+D;QAC/D,oBAAoB;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACxC,MAAM,OAAO,GAAG,mCAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;aAClD;SACF;QAED,sBAAsB;QACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,CAAS;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,2DAA2D;YAC3D,wDAAwD;YACxD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;YAEhE,0DAA0D;YAC1D,sDAAsD;YACtD,eAAe;YACf,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;gBAClE,OAAO,mCAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAC9D;SACF;QACD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;CACF;AArED,sDAqEC","sourcesContent":["import { CommitmentSecret } from './CommitmentSecret';\n\nexport type CommitmentSecretStoreItem = { index: bigint; secret: Buffer };\n\n/**\n * Defined in BOLT3, this class compactly stored received commitment\n * secrets from our counterparty. Without this mechanism we are required\n * to store every commitment secret that we receive (2^48) which can be\n * a huge amount of data at 32-bytes per secret.\n *\n * Instead we can use the fact that later commitment secrets act as\n * prefixes for prior commitment secrets. We can then compactly store\n * only the secrets we need to derive older commitment secrets.\n */\nexport class CommitmentSecretStore {\n  /**\n   * Returns the index of the least-significant bit. This is used to\n   * determine what the value at I is a prefix for.\n   * @param I commitment\n   */\n  public static calcIndex(I: bigint): number {\n    for (let i = BigInt(0); i < BigInt(48); i++) {\n      if (I & (BigInt(1) << i)) return Number(i);\n    }\n    return 48; // seed\n  }\n\n  private secrets: CommitmentSecretStoreItem[];\n\n  constructor() {\n    this.secrets = new Array(49) as CommitmentSecretStoreItem[];\n    for (let i = 0; i < this.secrets.length; i++) {\n      this.secrets[i] = { index: BigInt(0), secret: undefined };\n    }\n  }\n\n  /**\n   * Insert the commitment secret into the store and verify that the\n   * secret is able to derive all prior commitment secrets that we\n   * already know about.\n   *\n   * @param secret 32-byte secp256k1 secret\n   * @param i commitment number\n   */\n  public insert(secret: Buffer, i: bigint) {\n    const B = CommitmentSecretStore.calcIndex(i);\n\n    // validate that the new secret allows derivation of known keys\n    // up to the new key\n    for (let b = 0; b < B; b++) {\n      const existing = this.secrets[b].secret;\n      const derived = CommitmentSecret.derive(secret, this.secrets[b].index, B);\n      if (!derived.equals(existing)) {\n        throw new Error('The secret for I is incorrect');\n      }\n    }\n\n    // update the position\n    this.secrets[Number(B)].index = i;\n    this.secrets[Number(B)].secret = secret;\n  }\n\n  /**\n   * Derives old commitment secrets from the from the compact store.\n   * Throws if we do not have the commitment secret for the specified\n   * commitment nmber.\n   * @param i derivation number starting at 2^48-1 down to zero.\n   */\n  public derive(i: bigint) {\n    for (let b = 0; b < this.secrets.length; b++) {\n      // construct a mask of the upper bits. Basically we lop off\n      // the lower b bits and then right-shift back into place\n      const mask = (BigInt(0xffffffffffff) >> BigInt(b)) << BigInt(b);\n\n      // Check if the prefix found using I & mask is one that we\n      // can use to derive our value. If not, we need to try\n      // another bit.\n      if ((i & mask) === this.secrets[b].index && this.secrets[b].secret) {\n        return CommitmentSecret.derive(this.secrets[b].secret, i, b);\n      }\n    }\n    throw new Error(\"Index I hasn't been received yet\");\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e812a70a2b4175fda9adde757fdb8106e02cfcc5","contentHash":"a694d9807c119207356be5e5053e0db0b2f85159db4170e23fed092e341ee652"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/Htlc.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/Htlc.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":22}},"2":{"start":{"line":37,"column":8},"end":{"line":37,"column":29}},"3":{"start":{"line":38,"column":8},"end":{"line":38,"column":35}},"4":{"start":{"line":39,"column":8},"end":{"line":39,"column":27}},"5":{"start":{"line":40,"column":8},"end":{"line":40,"column":37}},"6":{"start":{"line":41,"column":8},"end":{"line":41,"column":39}},"7":{"start":{"line":42,"column":8},"end":{"line":42,"column":47}},"8":{"start":{"line":45,"column":0},"end":{"line":45,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":36,"column":4},"end":{"line":36,"column":5}},"loc":{"start":{"line":36,"column":84},"end":{"line":43,"column":5}},"line":36}},"branchMap":{},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":1},"f":{"0":0},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/Htlc.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/Htlc.ts"],"names":[],"mappings":";;;AAIA;;;;;;;;;GASG;AACH,MAAa,IAAI;IAMf;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,YACW,MAAc,EACd,SAAwB,EACxB,KAAY,EACZ,UAAkB,EAClB,WAAmB,EAC5B,eAAwB;QALf,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAe;QACxB,UAAK,GAAL,KAAK,CAAO;QACZ,eAAU,GAAV,UAAU,CAAQ;QAClB,gBAAW,GAAX,WAAW,CAAQ;QAG5B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;CACF;AArCD,oBAqCC","sourcesContent":["import { Value } from '@node-dlc/bitcoin';\n\nimport { HtlcDirection } from './HtlcDirection';\n\n/**\n * An HTLC (hashed time-locked contract) is part of the transfer\n * layer of the Lightning network. HTLCs are used to trustlessly offer\n * a payment to a counterparty if they are able to provide a preimage\n * of the hash. The offeror can claw back funds after an expiration\n * period (absolute lock time) if the recipient is unable to provide\n * the preimage for the contract. HTLCs are used in Lightning for both\n * initiating payments to a peer directly and as part of forwarding\n * payments.\n */\nexport class Htlc {\n  /**\n   * The preimage of the payment hash using SHA256.\n   */\n  public paymentPreimage: Buffer;\n\n  /**\n   * Constructs an HTLC with associated information\n   * @param htlcId Identifier for the HTLC is a counter maintained\n   * per-channel, per-peer. It starts at zero and is incremented when\n   * an HTLC is offered. This value is used when sending channel\n   * related messages to disambiguate HTLCs that may share the same\n   * preimage.\n   *\n   * @param direction Direction, from your node's perspective, that\n   * indicates if the HTLC was offered or received.\n   *\n   * @param value The value of the HTLC in millisatoshi.\n   *\n   * @param cltvExpiry The absolutely blocktime expiry of the HTLC.\n   * The value must be under 500,000,000 to ensure it is a block-based\n   * locktime. After this timeout has expired, the offeror can perform\n   * a forced resolution on-chain.\n   *\n   * @param paymentHash The 32-byte hash of the preimage. Knowledge of\n   * the preimage is irrevocable and considers payment complete.\n   */\n  constructor(\n    readonly htlcId: bigint,\n    readonly direction: HtlcDirection,\n    readonly value: Value,\n    readonly cltvExpiry: number,\n    readonly paymentHash: Buffer,\n    paymentPreimage?: Buffer,\n  ) {\n    this.paymentPreimage = paymentPreimage;\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"7f2f01c82ad7d1c76743735be845459f898d98ee","contentHash":"3e940708a7bf7d7b6671cd14d0fb601b8ac781337ad383d661baaf2ac4be74c4"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/HtlcDirection.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/HtlcDirection.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":31}},"2":{"start":{"line":8,"column":0},"end":{"line":20,"column":74}},"3":{"start":{"line":13,"column":4},"end":{"line":13,"column":60}},"4":{"start":{"line":19,"column":4},"end":{"line":19,"column":62}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":8,"column":1},"end":{"line":8,"column":2}},"loc":{"start":{"line":8,"column":26},"end":{"line":20,"column":1}},"line":8}},"branchMap":{"0":{"loc":{"start":{"line":20,"column":19},"end":{"line":20,"column":72}},"type":"binary-expr","locations":[{"start":{"line":20,"column":19},"end":{"line":20,"column":40}},{"start":{"line":20,"column":45},"end":{"line":20,"column":71}}],"line":20}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1},"f":{"0":1},"b":{"0":[1,1]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/HtlcDirection.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/HtlcDirection.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,aAaX;AAbD,WAAY,aAAa;IACvB;;;OAGG;IACH,uDAAW,CAAA;IAEX;;;;OAIG;IACH,yDAAY,CAAA;AACd,CAAC,EAbW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAaxB","sourcesContent":["/**\n * Direction, from our node's perspective, of an HTLC.\n */\nexport enum HtlcDirection {\n  /**\n   * We have offered this HTLC to pay a node directly or on behalf\n   * of a forward request.\n   */\n  Offered = 0,\n\n  /**\n   * We have accepted this HTLC from the counterparty. We may be the\n   * final hop in a chain (and would posssess) the preimage or we may\n   * be a processing hop in a sequence of payments.\n   */\n  Accepted = 1,\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"497bfa1ccaa623164a65dc40e8db735c66886bc4","contentHash":"bd609ba5ba332a17195b60edc7abdd9be731c908c79f969db80585cae339f68a"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ScriptFactory.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ScriptFactory.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":31}},"2":{"start":{"line":4,"column":18},"end":{"line":4,"column":46}},"3":{"start":{"line":5,"column":17},"end":{"line":5,"column":44}},"4":{"start":{"line":16,"column":24},"end":{"line":16,"column":79}},"5":{"start":{"line":16,"column":66},"end":{"line":16,"column":78}},"6":{"start":{"line":17,"column":8},"end":{"line":17,"column":56}},"7":{"start":{"line":33,"column":8},"end":{"line":33,"column":281}},"8":{"start":{"line":59,"column":8},"end":{"line":65,"column":192}},"9":{"start":{"line":92,"column":8},"end":{"line":98,"column":222}},"10":{"start":{"line":101,"column":0},"end":{"line":101,"column":38}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":4},"end":{"line":15,"column":5}},"loc":{"start":{"line":15,"column":51},"end":{"line":18,"column":5}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":16,"column":56},"end":{"line":16,"column":57}},"loc":{"start":{"line":16,"column":66},"end":{"line":16,"column":78}},"line":16},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":4},"end":{"line":32,"column":5}},"loc":{"start":{"line":32,"column":71},"end":{"line":34,"column":5}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":58,"column":4},"end":{"line":58,"column":5}},"loc":{"start":{"line":58,"column":95},"end":{"line":66,"column":5}},"line":58},"4":{"name":"(anonymous_4)","decl":{"start":{"line":91,"column":4},"end":{"line":91,"column":5}},"loc":{"start":{"line":91,"column":108},"end":{"line":99,"column":5}},"line":91}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ScriptFactory.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/ScriptFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import { OpCode, Script } from '@node-dlc/bitcoin';\nimport { hash160, ripemd160 } from '@node-dlc/crypto';\n\nexport class ScriptFactory {\n  /**\n   * Constructs the P2MS commit script used in in the funding transaction\n   * as defined in BOLT3. The pubkeys must be sorted in lexicographical\n   * order.\n   *\n   * @param openPubKey funding_pubkey sent in open_channel\n   * @param acceptPubKey funding_pubkey sent in accept_channel\n   */\n  public static fundingScript(\n    openPubKey: Buffer,\n    acceptPubKey: Buffer,\n  ): Script {\n    const pubkeys = [openPubKey, acceptPubKey].sort((a, b) => a.compare(b));\n    return Script.p2msLock(2, ...pubkeys);\n  }\n\n  /**\n   * Constructs an revocable sequence maturing contract using the\n   * provided keys and delay. This script is used in the `to_local`\n   * output of the commmitment transaction as well as the secondary\n   * HTLC-Success and HTLC-Timeout transactions.\n   *\n   * @param revocationPubKey the revocation pubkey that has the ability\n   * to perform a penalty transaction should a revoked version of this\n   * output be spend.\n   * @param delayedPubKey the delayed pubkey spendable after the\n   * sequence delay\n   * @param toSelfDelay the sequence delay in blocks\n   */\n  public static toLocalScript(\n    revocationPubKey: Buffer,\n    delayedPubKey: Buffer,\n    toSelfDelay: number,\n  ): Script {\n    return new Script(\n            OpCode.OP_IF,\n                revocationPubKey,\n            OpCode.OP_ELSE,\n                Script.number(toSelfDelay),\n                OpCode.OP_CHECKSEQUENCEVERIFY,\n                OpCode.OP_DROP,\n                delayedPubKey,\n            OpCode.OP_ENDIF,\n            OpCode.OP_CHECKSIG,\n        ); // prettier-ignore\n  }\n\n  /**\n   * Constructs the script for an offered HTLC output of a  commitment\n   * transaction as defined in BOLT3. This enables on-chain resolution\n   * of an HTLC to the local node via the secondary HTLC-Timeout\n   * transaction. This secondary transaction is both sequence delayed\n   * and timelocked and requires signatures by both parties to prevent\n   * premature spending. The remote node can immediately resolve the\n   * transaction wit knowledge of the preimage.\n   *\n   * Revocable with witness:\n   * [revocationSig, revocationPubKey]\n   *\n   * Pay to local via the HTLC-Timeout transaction by using witness\n   * [0, remoteHtlcSig, localHtlcSig, <>]\n   *\n   * Pay to remote counterparty without delay using witness\n   * [remoteHtlcSig, preimage]\n   *\n   * @param paymentHash\n   * @param revocationPubKey\n   * @param localHtlcPubKey\n   * @param remoteHtlcPubKey\n   */\n  public static offeredHtlcScript(\n    paymentHash: Buffer,\n    revocationPubKey: Buffer,\n    localHtlcPubKey: Buffer,\n    remoteHtlcPubKey: Buffer,\n  ): Script {\n    return new Script(\n            // to remote with revocation key\n            OpCode.OP_DUP, OpCode.OP_HASH160, hash160(revocationPubKey), OpCode.OP_EQUAL,\n            OpCode.OP_IF,\n                OpCode.OP_CHECKSIG,\n            OpCode.OP_ELSE,\n                remoteHtlcPubKey, OpCode.OP_SWAP, OpCode.OP_SIZE, Script.number(32), OpCode.OP_EQUAL,\n                OpCode.OP_NOTIF,\n                    // to local via HTLC-Timeout transaction (timelocked)\n                    OpCode.OP_DROP, OpCode.OP_2, OpCode.OP_SWAP, localHtlcPubKey, OpCode.OP_2, OpCode.OP_CHECKMULTISIG,\n                OpCode.OP_ELSE,\n                    // to remote with preimage and signature\n                    OpCode.OP_HASH160, ripemd160(paymentHash), OpCode.OP_EQUALVERIFY,\n                    OpCode.OP_CHECKSIG,\n                OpCode.OP_ENDIF,\n            OpCode.OP_ENDIF,\n        ); // prettier-ignore\n  }\n\n  /**\n   * Constructs the script for a received HTLC output of a commitment\n   * transaction as defined in BOLT3. This enables on-chain resolution\n   * of an HTLC to the local node via the secondary HTLC-Success\n   * transaction. This secondary transaction is sequence delayed and\n   * thus local spends require both parties signatures. The remote\n   * node can perform a timeout of this output after the timelock\n   * expires.\n   *\n   * Revocable with witness:\n   * [revocationSig, revocationPubKey]\n   *\n   * Pay to local via the HTLC-Success transaction by using witness\n   * [0, remoteHtlcSig, localHtlcSig, preimage]\n   *\n   * Pay to remote counterparty after the CLTV expiry using witness\n   * [remoteHtlcSig, <>]\n   *\n   * @param paymentHash\n   * @param cltvExpiry\n   * @param revocationPubKey\n   * @param localHtlcPubKey\n   * @param remoteHtlcPubKey\n   */\n  public static receivedHtlcScript(\n    paymentHash: Buffer,\n    cltvExpiry: number,\n    revocationPubKey: Buffer,\n    localHtlcPubKey: Buffer,\n    remoteHtlcPubKey: Buffer,\n  ): Script {\n    return new Script(\n            // to remote with revocation key\n            OpCode.OP_DUP, OpCode.OP_HASH160, hash160(revocationPubKey), OpCode.OP_EQUAL,\n            OpCode.OP_IF,\n                OpCode.OP_CHECKSIG,\n            OpCode.OP_ELSE,\n                remoteHtlcPubKey, OpCode.OP_SWAP, OpCode.OP_SIZE, Script.number(32), OpCode.OP_EQUAL,\n                OpCode.OP_IF,\n                    // to local via HTLC-Success transaction\n                    OpCode.OP_HASH160, ripemd160(paymentHash), OpCode.OP_EQUALVERIFY,\n                    OpCode.OP_2, OpCode.OP_SWAP, localHtlcPubKey, OpCode.OP_2, OpCode.OP_CHECKMULTISIG,\n                OpCode.OP_ELSE,\n                    // to remote after cltv expiry with signature\n                    OpCode.OP_DROP, Script.number(cltvExpiry), OpCode.OP_CHECKLOCKTIMEVERIFY, OpCode.OP_DROP,\n                    OpCode.OP_CHECKSIG,\n                OpCode.OP_ENDIF,\n            OpCode.OP_ENDIF,\n        ); // prettier-ignore\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"b9ef596357dea8ded961971d54a9d25b72211198","contentHash":"57bae0cb030b85966142a8882a88b46627500f0a8b491093b7ef978e0cc6adb6"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/TxFactory.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/TxFactory.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":27}},"2":{"start":{"line":4,"column":18},"end":{"line":4,"column":46}},"3":{"start":{"line":5,"column":27},"end":{"line":5,"column":56}},"4":{"start":{"line":6,"column":24},"end":{"line":6,"column":50}},"5":{"start":{"line":7,"column":24},"end":{"line":7,"column":50}},"6":{"start":{"line":16,"column":23},"end":{"line":16,"column":120}},"7":{"start":{"line":17,"column":8},"end":{"line":17,"column":50}},"8":{"start":{"line":59,"column":41},"end":{"line":59,"column":148}},"9":{"start":{"line":61,"column":19},"end":{"line":61,"column":44}},"10":{"start":{"line":62,"column":8},"end":{"line":62,"column":23}},"11":{"start":{"line":63,"column":8},"end":{"line":63,"column":112}},"12":{"start":{"line":65,"column":8},"end":{"line":65,"column":96}},"13":{"start":{"line":67,"column":30},"end":{"line":67,"column":32}},"14":{"start":{"line":68,"column":8},"end":{"line":91,"column":9}},"15":{"start":{"line":69,"column":32},"end":{"line":69,"column":47}},"16":{"start":{"line":76,"column":12},"end":{"line":83,"column":13}},"17":{"start":{"line":77,"column":16},"end":{"line":78,"column":105}},"18":{"start":{"line":81,"column":16},"end":{"line":82,"column":105}},"19":{"start":{"line":85,"column":30},"end":{"line":85,"column":67}},"20":{"start":{"line":86,"column":32},"end":{"line":86,"column":55}},"21":{"start":{"line":88,"column":12},"end":{"line":90,"column":13}},"22":{"start":{"line":89,"column":16},"end":{"line":89,"column":41}},"23":{"start":{"line":93,"column":23},"end":{"line":93,"column":55}},"24":{"start":{"line":94,"column":24},"end":{"line":94,"column":66}},"25":{"start":{"line":96,"column":8},"end":{"line":113,"column":9}},"26":{"start":{"line":97,"column":29},"end":{"line":97,"column":54}},"27":{"start":{"line":98,"column":12},"end":{"line":103,"column":13}},"28":{"start":{"line":99,"column":16},"end":{"line":99,"column":64}},"29":{"start":{"line":102,"column":16},"end":{"line":102,"column":52}},"30":{"start":{"line":106,"column":29},"end":{"line":106,"column":55}},"31":{"start":{"line":107,"column":12},"end":{"line":112,"column":13}},"32":{"start":{"line":108,"column":16},"end":{"line":108,"column":65}},"33":{"start":{"line":111,"column":16},"end":{"line":111,"column":53}},"34":{"start":{"line":115,"column":23},"end":{"line":115,"column":25}},"35":{"start":{"line":116,"column":8},"end":{"line":123,"column":9}},"36":{"start":{"line":117,"column":34},"end":{"line":120,"column":154}},"37":{"start":{"line":121,"column":26},"end":{"line":121,"column":100}},"38":{"start":{"line":122,"column":12},"end":{"line":122,"column":39}},"39":{"start":{"line":125,"column":8},"end":{"line":129,"column":9}},"40":{"start":{"line":126,"column":12},"end":{"line":128,"column":15}},"41":{"start":{"line":131,"column":8},"end":{"line":133,"column":9}},"42":{"start":{"line":132,"column":12},"end":{"line":132,"column":103}},"43":{"start":{"line":135,"column":8},"end":{"line":148,"column":11}},"44":{"start":{"line":137,"column":26},"end":{"line":137,"column":67}},"45":{"start":{"line":138,"column":12},"end":{"line":139,"column":29}},"46":{"start":{"line":139,"column":16},"end":{"line":139,"column":29}},"47":{"start":{"line":141,"column":34},"end":{"line":143,"column":59}},"48":{"start":{"line":144,"column":12},"end":{"line":145,"column":37}},"49":{"start":{"line":145,"column":16},"end":{"line":145,"column":37}},"50":{"start":{"line":147,"column":12},"end":{"line":147,"column":53}},"51":{"start":{"line":150,"column":28},"end":{"line":150,"column":30}},"52":{"start":{"line":151,"column":8},"end":{"line":154,"column":9}},"53":{"start":{"line":152,"column":12},"end":{"line":152,"column":32}},"54":{"start":{"line":153,"column":12},"end":{"line":153,"column":35}},"55":{"start":{"line":156,"column":8},"end":{"line":156,"column":33}},"56":{"start":{"line":174,"column":19},"end":{"line":174,"column":44}},"57":{"start":{"line":177,"column":8},"end":{"line":177,"column":98}},"58":{"start":{"line":179,"column":23},"end":{"line":179,"column":34}},"59":{"start":{"line":180,"column":21},"end":{"line":180,"column":55}},"60":{"start":{"line":181,"column":21},"end":{"line":181,"column":72}},"61":{"start":{"line":183,"column":8},"end":{"line":183,"column":171}},"62":{"start":{"line":187,"column":8},"end":{"line":187,"column":62}},"63":{"start":{"line":188,"column":8},"end":{"line":188,"column":18}},"64":{"start":{"line":205,"column":19},"end":{"line":205,"column":44}},"65":{"start":{"line":208,"column":8},"end":{"line":208,"column":98}},"66":{"start":{"line":210,"column":23},"end":{"line":210,"column":34}},"67":{"start":{"line":211,"column":21},"end":{"line":211,"column":55}},"68":{"start":{"line":212,"column":21},"end":{"line":212,"column":72}},"69":{"start":{"line":214,"column":8},"end":{"line":214,"column":171}},"70":{"start":{"line":217,"column":8},"end":{"line":217,"column":48}},"71":{"start":{"line":218,"column":8},"end":{"line":218,"column":18}},"72":{"start":{"line":221,"column":0},"end":{"line":221,"column":30}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":4},"end":{"line":15,"column":5}},"loc":{"start":{"line":15,"column":64},"end":{"line":18,"column":5}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":58,"column":4},"end":{"line":58,"column":5}},"loc":{"start":{"line":58,"column":297},"end":{"line":157,"column":5}},"line":58},"2":{"name":"(anonymous_2)","decl":{"start":{"line":135,"column":20},"end":{"line":135,"column":21}},"loc":{"start":{"line":135,"column":30},"end":{"line":148,"column":9}},"line":135},"3":{"name":"(anonymous_3)","decl":{"start":{"line":173,"column":4},"end":{"line":173,"column":5}},"loc":{"start":{"line":173,"column":117},"end":{"line":189,"column":5}},"line":173},"4":{"name":"(anonymous_4)","decl":{"start":{"line":204,"column":4},"end":{"line":204,"column":5}},"loc":{"start":{"line":204,"column":117},"end":{"line":219,"column":5}},"line":204}},"branchMap":{"0":{"loc":{"start":{"line":58,"column":285},"end":{"line":58,"column":295}},"type":"default-arg","locations":[{"start":{"line":58,"column":293},"end":{"line":58,"column":295}}],"line":58},"1":{"loc":{"start":{"line":76,"column":12},"end":{"line":83,"column":13}},"type":"if","locations":[{"start":{"line":76,"column":12},"end":{"line":83,"column":13}},{"start":{"line":76,"column":12},"end":{"line":83,"column":13}}],"line":76},"2":{"loc":{"start":{"line":78,"column":20},"end":{"line":78,"column":104}},"type":"cond-expr","locations":[{"start":{"line":78,"column":79},"end":{"line":78,"column":90}},{"start":{"line":78,"column":93},"end":{"line":78,"column":104}}],"line":78},"3":{"loc":{"start":{"line":82,"column":20},"end":{"line":82,"column":104}},"type":"cond-expr","locations":[{"start":{"line":82,"column":79},"end":{"line":82,"column":90}},{"start":{"line":82,"column":93},"end":{"line":82,"column":104}}],"line":82},"4":{"loc":{"start":{"line":88,"column":12},"end":{"line":90,"column":13}},"type":"if","locations":[{"start":{"line":88,"column":12},"end":{"line":90,"column":13}},{"start":{"line":88,"column":12},"end":{"line":90,"column":13}}],"line":88},"5":{"loc":{"start":{"line":96,"column":8},"end":{"line":113,"column":9}},"type":"if","locations":[{"start":{"line":96,"column":8},"end":{"line":113,"column":9}},{"start":{"line":96,"column":8},"end":{"line":113,"column":9}}],"line":96},"6":{"loc":{"start":{"line":98,"column":12},"end":{"line":103,"column":13}},"type":"if","locations":[{"start":{"line":98,"column":12},"end":{"line":103,"column":13}},{"start":{"line":98,"column":12},"end":{"line":103,"column":13}}],"line":98},"7":{"loc":{"start":{"line":107,"column":12},"end":{"line":112,"column":13}},"type":"if","locations":[{"start":{"line":107,"column":12},"end":{"line":112,"column":13}},{"start":{"line":107,"column":12},"end":{"line":112,"column":13}}],"line":107},"8":{"loc":{"start":{"line":117,"column":34},"end":{"line":120,"column":154}},"type":"cond-expr","locations":[{"start":{"line":119,"column":18},"end":{"line":119,"column":136}},{"start":{"line":120,"column":18},"end":{"line":120,"column":154}}],"line":117},"9":{"loc":{"start":{"line":117,"column":34},"end":{"line":118,"column":91}},"type":"binary-expr","locations":[{"start":{"line":117,"column":35},"end":{"line":117,"column":48}},{"start":{"line":117,"column":52},"end":{"line":117,"column":108}},{"start":{"line":118,"column":17},"end":{"line":118,"column":29}},{"start":{"line":118,"column":33},"end":{"line":118,"column":90}}],"line":117},"10":{"loc":{"start":{"line":125,"column":8},"end":{"line":129,"column":9}},"type":"if","locations":[{"start":{"line":125,"column":8},"end":{"line":129,"column":9}},{"start":{"line":125,"column":8},"end":{"line":129,"column":9}}],"line":125},"11":{"loc":{"start":{"line":131,"column":8},"end":{"line":133,"column":9}},"type":"if","locations":[{"start":{"line":131,"column":8},"end":{"line":133,"column":9}},{"start":{"line":131,"column":8},"end":{"line":133,"column":9}}],"line":131},"12":{"loc":{"start":{"line":138,"column":12},"end":{"line":139,"column":29}},"type":"if","locations":[{"start":{"line":138,"column":12},"end":{"line":139,"column":29}},{"start":{"line":138,"column":12},"end":{"line":139,"column":29}}],"line":138},"13":{"loc":{"start":{"line":144,"column":12},"end":{"line":145,"column":37}},"type":"if","locations":[{"start":{"line":144,"column":12},"end":{"line":145,"column":37}},{"start":{"line":144,"column":12},"end":{"line":145,"column":37}}],"line":144},"14":{"loc":{"start":{"line":181,"column":21},"end":{"line":181,"column":72}},"type":"cond-expr","locations":[{"start":{"line":181,"column":46},"end":{"line":181,"column":47}},{"start":{"line":181,"column":50},"end":{"line":181,"column":72}}],"line":181},"15":{"loc":{"start":{"line":212,"column":21},"end":{"line":212,"column":72}},"type":"cond-expr","locations":[{"start":{"line":212,"column":46},"end":{"line":212,"column":47}},{"start":{"line":212,"column":50},"end":{"line":212,"column":72}}],"line":212}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{"0":[0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0,0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/TxFactory.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/lightning/TxFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n  HashValue,\n  LockTime,\n  OutPoint,\n  Script,\n  Sequence,\n  TxBuilder,\n  TxOut,\n  Value,\n} from '@node-dlc/bitcoin';\n\nimport { CommitmentNumber } from './CommitmentNumber';\nimport { Htlc } from './Htlc';\nimport { HtlcDirection } from './HtlcDirection';\nimport { ScriptFactory } from './ScriptFactory';\n\nexport class TxFactory {\n  /**\n   * Creates a TxOut to attach to a funding transaction. This includes\n   * the P2WSH-P2MS script that uses 2-2MS. The open and accept funding\n   * pubkeys are sorted lexicographcially to create the script.\n   * @param builder\n   */\n  public static createFundingOutput(\n    value: Value,\n    openPubKey: Buffer,\n    acceptPubKey: Buffer,\n  ): TxOut {\n    const script = Script.p2wshLock(\n      ScriptFactory.fundingScript(openPubKey, acceptPubKey),\n    );\n    return new TxOut(value, script);\n  }\n\n  /**\n   * Constructs an unsigned commitment transaction according to BOLT3.\n   * This method is a low level commitment transaction builder, meaning\n   * it accepts primatives and constructs a commitment transaction\n   * accordingly. The proper inputs are determiend\n   *\n   * @param isFunderLocal True when the funding node is local. This\n   * is used to determine which output pays fees (to_local/to_remote).\n   * @param commitmentNumber The commitment number of the transaction\n   * which is used to generate the obscurred commitment number.\n   * @param openPaymentBasePoint The basepoint sent in open_channel\n   * which is used to generate the obscurred commitment number.\n   * @param acceptPaymentBasePoint The basepoitn sent in accept_channel\n   * which is used to generate the obscurred commitment number.\n   * @param fundingOutPoint The outpoint of the funding transaction\n   * which was established in funding_created.\n   * @param dustLimitSatoshi The dust limit in sats after which outputs\n   * will be prune\n   * @param feePerKw The fee rate per kiloweight which will be deducted\n   * from the funding node's output\n   * @param localDelay The delay applied to the to_local output\n   * @param localValue Value paid to the to_local RSMC output\n   * @param remoteValue Value paid to the to_emote P2WPKH output\n   * @param revocationPubKey The revocation public key used to in the\n   * to_local and HTLC outputs\n   * @param delayedPubKey The delayed public key used to spend the\n   * to_local output\n   * @param remotePubKey The public key used to spend the to_remote\n   * output\n   * @param reverseHtlcs True when the HTLC direction needs to be\n   * inverted because the holder of this commitment transaction is\n   * our counterparty.\n   * @param localHtlcPubKey The public key used to spend HTLC outputs\n   * by the commitment holder.\n   * @param remoteHtlcPubKey The public key used to spend HTLC outputs\n   * by the commitment counterparty.\n   * @param htlcs A full list of HTLCs that will be selectively\n   * included in the commitment transaction based on the feePerKw.\n   */\n  public static createCommitment(\n    isFunderLocal: boolean,\n    commitmentNumber: number,\n    openPaymentBasePoint: Buffer,\n    acceptPaymentBasePoint: Buffer,\n    fundingOutPoint: OutPoint,\n    dustLimitSatoshi: Value,\n    feePerKw: bigint,\n    localDelay: number,\n    localValue: Value,\n    remoteValue: Value,\n    revocationPubKey: Buffer,\n    delayedPubKey: Buffer,\n    remotePubKey: Buffer,\n    reverseHtlcs: boolean,\n    localHtlcPubKey?: Buffer,\n    remoteHtlcPubKey?: Buffer,\n    htlcs: Htlc[] = [],\n  ): [TxBuilder, Htlc[]] {\n    const obscuredCommitmentNumber = CommitmentNumber.obscure(\n      commitmentNumber,\n      openPaymentBasePoint,\n      acceptPaymentBasePoint,\n    );\n\n    // 1. add the input as the funding outpoint and set the nSequence\n    const tx = new TxBuilder();\n    tx.version = 2;\n    tx.addInput(\n      fundingOutPoint,\n      CommitmentNumber.getSequence(obscuredCommitmentNumber),\n    );\n\n    // 2. set the locktime to the obscurred commitment number\n    tx.locktime = CommitmentNumber.getLockTime(obscuredCommitmentNumber);\n\n    // 3. find unpruned outputs\n    const unprunedHtlcs: Htlc[] = [];\n    for (const htlc of htlcs) {\n      const valueInSats = htlc.value.sats;\n      let feeWeight: bigint;\n\n      // HtlcDirection refers to the local nodes perception of the HTLC.\n      // When isLocal, offered uses the HTLC-Timeout weight of 663. When\n      // remote, the commitment is for the remote counterparty and an\n      // offered HTLC is received and will be spent by the remote\n      // counterparty using the HTLC-Success transaction with a weight of 703\n      if (reverseHtlcs) {\n        feeWeight =\n          htlc.direction === HtlcDirection.Offered ? BigInt(703) : BigInt(663);\n      } else {\n        feeWeight =\n          htlc.direction === HtlcDirection.Offered ? BigInt(663) : BigInt(703);\n      }\n\n      // Calculate the HTLC less fees\n      const feeInSats = (feeWeight * feePerKw) / BigInt(1000);\n      const satsLessFee = valueInSats - feeInSats;\n\n      // Only keep HTLCs greater than the dustLimitSatoshi for the tx\n      if (satsLessFee >= dustLimitSatoshi.sats) {\n        unprunedHtlcs.push(htlc);\n      }\n    }\n\n    // 4. calculate base fee\n    const weight = 724 + unprunedHtlcs.length * 172;\n    const baseFee = (BigInt(weight) * feePerKw) / BigInt(1000);\n\n    // 5. substract base fee from funding node\n    if (isFunderLocal) {\n      const newValue = localValue.sats - baseFee;\n      if (newValue > BigInt(0)) {\n        localValue = Value.fromSats(newValue);\n      } else {\n        localValue = Value.zero();\n      }\n    } else {\n      const newValue = remoteValue.sats - baseFee;\n      if (newValue > BigInt(0)) {\n        remoteValue = Value.fromSats(newValue);\n      } else {\n        remoteValue = Value.zero();\n      }\n    }\n\n    // 6/7. add unpruned offered/received HTLCs\n    const txouts: Array<[TxOut, Htlc?]> = [];\n    for (const htlc of unprunedHtlcs) {\n      const witnessScript: Script =\n        (!reverseHtlcs && htlc.direction === HtlcDirection.Offered) ||\n        (reverseHtlcs && htlc.direction === HtlcDirection.Accepted)\n          ? ScriptFactory.offeredHtlcScript(\n              htlc.paymentHash,\n              revocationPubKey,\n              localHtlcPubKey,\n              remoteHtlcPubKey,\n            )\n          : ScriptFactory.receivedHtlcScript(\n              htlc.paymentHash,\n              htlc.cltvExpiry,\n              revocationPubKey,\n              localHtlcPubKey,\n              remoteHtlcPubKey,\n            );\n      const txout = new TxOut(htlc.value, Script.p2wshLock(witnessScript));\n      txouts.push([txout, htlc]);\n    }\n\n    // 8. add local if unpruned\n    if (localValue.sats >= dustLimitSatoshi.sats) {\n      txouts.push([\n        new TxOut(\n          localValue,\n          Script.p2wshLock(\n            ScriptFactory.toLocalScript(\n              revocationPubKey,\n              delayedPubKey,\n              localDelay,\n            ),\n          ),\n        ),\n      ]);\n    }\n\n    // 9. add remote if unpruned\n    if (remoteValue.sats >= dustLimitSatoshi.sats) {\n      txouts.push([new TxOut(remoteValue, Script.p2wpkhLock(remotePubKey))]);\n    }\n\n    // 10. sort outputs using bip69 and using cltv for htlc tiebreaks\n    txouts.sort((a, b) => {\n      // compare on value\n      const value = Number(a[0].value.sats - b[0].value.sats);\n      if (value !== 0) return value;\n\n      // compare on script\n      const scriptCompare = a[0].scriptPubKey\n        .serializeCmds()\n        .compare(b[0].scriptPubKey.serializeCmds());\n      if (scriptCompare !== 0) return scriptCompare;\n\n      // tie-break on htlcs\n      return b[1].cltvExpiry - a[1].cltvExpiry;\n    });\n\n    // add hte outputs in sorted order\n    const sortedHtlcs: Htlc[] = [];\n    for (const [txout, htlc] of txouts) {\n      tx.addOutput(txout);\n      sortedHtlcs.push(htlc);\n    }\n\n    // return the tuple with the sorted htlcs\n    return [tx, sortedHtlcs];\n  }\n\n  /**\n   * Constructs an HTLC-Timeout transaction as defined in BOLT3. This\n   * transaction spends an offered HTLC from the commitment transaction\n   * and outputs the HTLC value less the fee. The output is spendable\n   * via an RSMC that is sequence locked for the received by the\n   * transaction owner. Finally this transaction has an absolute\n   * locktime of the HTLC's cltv expiry.\n   * @param commitmentTx\n   * @param outputIndex\n   * @param localDelay\n   * @param revocationPubKey\n   * @param delayedPubKey\n   * @param feePerKw\n   * @param htlc\n   */\n  public static createHtlcTimeout(\n    commitmentTx: HashValue,\n    outputIndex: number,\n    localDelay: number,\n    revocationPubKey: Buffer,\n    delayedPubKey: Buffer,\n    feePerKw: bigint,\n    htlc: Htlc,\n  ): TxBuilder {\n    const tx = new TxBuilder();\n\n    // Input points to the commmitment transaction and the BIP69\n    // sorted index of the HTLC. nSequence is set to zero.\n    tx.addInput(new OutPoint(commitmentTx, outputIndex), Sequence.zero());\n\n    // calc value less fees for this transaction\n    const weight = BigInt(663);\n    const fees = (weight * feePerKw) / BigInt(1000);\n    const sats = fees > htlc.value.sats ? 0 : htlc.value.sats - fees;\n\n    // Spends a P2WSH RSMC\n    tx.addOutput(\n      Value.fromSats(sats),\n      Script.p2wshLock(\n        ScriptFactory.toLocalScript(\n          revocationPubKey,\n          delayedPubKey,\n          localDelay,\n        ),\n      ),\n    );\n\n    // nLocktime is set to the cltvExpiry of the HTLC. This prevents\n    // the HTLC-Timeout from being broadcast until after the expiry\n    // has been reached.\n    tx.locktime = new LockTime(htlc.cltvExpiry);\n\n    return tx;\n  }\n\n  /**\n   * Constructs an HTLC-Success transaction as defined in BOLT3. This\n   * transaction spends a received HTLC form the commitment transaction\n   * and outputs the HTLC value less the fee. The output is spendable\n   * via an RSMC that is sequence locked for the received by the\n   * transaction owner.\n   * @param commitmentTx\n   * @param outputIndex\n   * @param localDelay\n   * @param revocationPubKey\n   * @param delayedPubKey\n   * @param feePerKw\n   * @param htlc\n   */\n  public static createHtlcSuccess(\n    commitmentTx: HashValue,\n    outputIndex: number,\n    localDelay: number,\n    revocationPubKey: Buffer,\n    delayedPubKey: Buffer,\n    feePerKw: bigint,\n    htlc: Htlc,\n  ): TxBuilder {\n    const tx = new TxBuilder();\n\n    // Input points to the commmitment transaction and the BIP69\n    // sorted index of the HTLC. nSequence is set to zero.\n    tx.addInput(new OutPoint(commitmentTx, outputIndex), Sequence.zero());\n\n    // calc value less fees for this transaction\n    const weight = BigInt(703);\n    const fees = (weight * feePerKw) / BigInt(1000);\n    const sats = fees > htlc.value.sats ? 0 : htlc.value.sats - fees;\n\n    // Spends a P2WSH RSMC\n    tx.addOutput(\n      Value.fromSats(sats),\n      Script.p2wshLock(\n        ScriptFactory.toLocalScript(\n          revocationPubKey,\n          delayedPubKey,\n          localDelay,\n        ),\n      ),\n    );\n\n    // nLockTime is zero since the tx owner can immediately spend\n    // this transaction if they have the preimage\n    tx.locktime = LockTime.zero();\n\n    return tx;\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"6fb0a811bc9806718a43ea821482d5d9c6784f69","contentHash":"c043219733b7aec7f058b5a32b79dfd36378390a43551925ac03f48635916fde"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/CoinSelect.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/CoinSelect.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":82}},"2":{"start":{"line":4,"column":20},"end":{"line":4,"column":50}},"3":{"start":{"line":5,"column":22},"end":{"line":5,"column":46}},"4":{"start":{"line":6,"column":22},"end":{"line":10,"column":1}},"5":{"start":{"line":11,"column":19},"end":{"line":13,"column":1}},"6":{"start":{"line":12,"column":4},"end":{"line":12,"column":40}},"7":{"start":{"line":14,"column":22},"end":{"line":16,"column":1}},"8":{"start":{"line":15,"column":4},"end":{"line":15,"column":42}},"9":{"start":{"line":17,"column":0},"end":{"line":17,"column":38}},"10":{"start":{"line":19,"column":18},"end":{"line":21,"column":1}},"11":{"start":{"line":20,"column":4},"end":{"line":20,"column":52}},"12":{"start":{"line":22,"column":17},"end":{"line":30,"column":1}},"13":{"start":{"line":23,"column":18},"end":{"line":23,"column":50}},"14":{"start":{"line":24,"column":4},"end":{"line":24,"column":30}},"15":{"start":{"line":25,"column":4},"end":{"line":25,"column":48}},"16":{"start":{"line":26,"column":20},"end":{"line":26,"column":86}},"17":{"start":{"line":27,"column":24},"end":{"line":27,"column":70}},"18":{"start":{"line":27,"column":64},"end":{"line":27,"column":69}},"19":{"start":{"line":28,"column":25},"end":{"line":28,"column":63}},"20":{"start":{"line":28,"column":57},"end":{"line":28,"column":62}},"21":{"start":{"line":29,"column":4},"end":{"line":29,"column":148}},"22":{"start":{"line":31,"column":0},"end":{"line":31,"column":28}},"23":{"start":{"line":42,"column":30},"end":{"line":75,"column":1}},"24":{"start":{"line":44,"column":4},"end":{"line":44,"column":93}},"25":{"start":{"line":44,"column":38},"end":{"line":44,"column":91}},"26":{"start":{"line":45,"column":18},"end":{"line":45,"column":19}},"27":{"start":{"line":46,"column":19},"end":{"line":46,"column":21}},"28":{"start":{"line":47,"column":21},"end":{"line":48,"column":43}},"29":{"start":{"line":47,"column":54},"end":{"line":47,"column":63}},"30":{"start":{"line":49,"column":4},"end":{"line":70,"column":5}},"31":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"32":{"start":{"line":50,"column":21},"end":{"line":50,"column":29}},"33":{"start":{"line":51,"column":26},"end":{"line":51,"column":38}},"34":{"start":{"line":52,"column":24},"end":{"line":52,"column":43}},"35":{"start":{"line":53,"column":26},"end":{"line":53,"column":36}},"36":{"start":{"line":55,"column":8},"end":{"line":62,"column":9}},"37":{"start":{"line":56,"column":12},"end":{"line":60,"column":18}},"38":{"start":{"line":57,"column":16},"end":{"line":60,"column":18}},"39":{"start":{"line":61,"column":12},"end":{"line":61,"column":21}},"40":{"start":{"line":63,"column":8},"end":{"line":63,"column":29}},"41":{"start":{"line":64,"column":8},"end":{"line":64,"column":26}},"42":{"start":{"line":65,"column":20},"end":{"line":65,"column":85}},"43":{"start":{"line":67,"column":8},"end":{"line":68,"column":21}},"44":{"start":{"line":68,"column":12},"end":{"line":68,"column":21}},"45":{"start":{"line":69,"column":8},"end":{"line":69,"column":31}},"46":{"start":{"line":71,"column":4},"end":{"line":74,"column":6}},"47":{"start":{"line":76,"column":0},"end":{"line":76,"column":54}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":19},"end":{"line":11,"column":20}},"loc":{"start":{"line":11,"column":25},"end":{"line":13,"column":1}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":14,"column":22},"end":{"line":14,"column":23}},"loc":{"start":{"line":14,"column":35},"end":{"line":16,"column":1}},"line":14},"2":{"name":"(anonymous_2)","decl":{"start":{"line":19,"column":18},"end":{"line":19,"column":19}},"loc":{"start":{"line":19,"column":34},"end":{"line":21,"column":1}},"line":19},"3":{"name":"(anonymous_3)","decl":{"start":{"line":22,"column":17},"end":{"line":22,"column":18}},"loc":{"start":{"line":22,"column":55},"end":{"line":30,"column":1}},"line":22},"4":{"name":"(anonymous_4)","decl":{"start":{"line":27,"column":58},"end":{"line":27,"column":59}},"loc":{"start":{"line":27,"column":64},"end":{"line":27,"column":69}},"line":27},"5":{"name":"(anonymous_5)","decl":{"start":{"line":28,"column":51},"end":{"line":28,"column":52}},"loc":{"start":{"line":28,"column":57},"end":{"line":28,"column":62}},"line":28},"6":{"name":"(anonymous_6)","decl":{"start":{"line":42,"column":30},"end":{"line":42,"column":31}},"loc":{"start":{"line":43,"column":12},"end":{"line":75,"column":1}},"line":43},"7":{"name":"(anonymous_7)","decl":{"start":{"line":44,"column":28},"end":{"line":44,"column":29}},"loc":{"start":{"line":44,"column":38},"end":{"line":44,"column":91}},"line":44},"8":{"name":"(anonymous_8)","decl":{"start":{"line":47,"column":40},"end":{"line":47,"column":41}},"loc":{"start":{"line":47,"column":54},"end":{"line":47,"column":63}},"line":47}},"branchMap":{"0":{"loc":{"start":{"line":55,"column":8},"end":{"line":62,"column":9}},"type":"if","locations":[{"start":{"line":55,"column":8},"end":{"line":62,"column":9}},{"start":{"line":55,"column":8},"end":{"line":62,"column":9}}],"line":55},"1":{"loc":{"start":{"line":56,"column":12},"end":{"line":60,"column":18}},"type":"if","locations":[{"start":{"line":56,"column":12},"end":{"line":60,"column":18}},{"start":{"line":56,"column":12},"end":{"line":60,"column":18}}],"line":56},"2":{"loc":{"start":{"line":67,"column":8},"end":{"line":68,"column":21}},"type":"if","locations":[{"start":{"line":67,"column":8},"end":{"line":68,"column":21}},{"start":{"line":67,"column":8},"end":{"line":68,"column":21}}],"line":67}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":207,"7":1,"8":95,"9":1,"10":1,"11":76,"12":1,"13":35,"14":35,"15":35,"16":35,"17":35,"18":104,"19":35,"20":35,"21":35,"22":1,"23":1,"24":9,"25":38,"26":9,"27":9,"28":9,"29":9,"30":9,"31":9,"32":36,"33":36,"34":36,"35":36,"36":36,"37":6,"38":2,"39":4,"40":30,"41":30,"42":30,"43":30,"44":25,"45":5,"46":2,"47":1},"f":{"0":207,"1":95,"2":76,"3":35,"4":104,"5":35,"6":9,"7":38,"8":9},"b":{"0":[6,30],"1":[2,4],"2":[25,5]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/CoinSelect.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/CoinSelect.ts"],"names":[],"mappings":"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","sourcesContent":["import { FundingInputV0 } from '@node-dlc/messaging';\n\nimport { DualFundingTxFinalizer } from './TxFinalizer';\n\nexport interface UTXO {\n  txid: string;\n  vout: number;\n  value: number;\n  address: string;\n  derivationPath?: string;\n}\n\nconst TX_INPUT_SIZE = {\n  LEGACY: 148,\n  P2SH: 92,\n  BECH32: 69,\n};\n\nconst inputBytes = () => {\n  return BigInt(TX_INPUT_SIZE.BECH32);\n};\n\nexport const dustThreshold = (feeRate: bigint): bigint => {\n  return BigInt(inputBytes()) * feeRate;\n};\n\n// order by descending value, minus the inputs approximate fee\nconst utxoScore = (x: UTXO, feeRate: bigint): bigint => {\n  return BigInt(x.value) - feeRate * inputBytes();\n};\n\nexport const dualFees = (\n  feeRate: bigint,\n  numInputs: number,\n  numContracts: number,\n): bigint => {\n  const input = new FundingInputV0();\n  input.maxWitnessLen = 108;\n  input.redeemScript = Buffer.from('', 'hex');\n\n  const fakeSPK = Buffer.from(\n    '0014663117d27e78eb432505180654e603acb30e8a4a',\n    'hex',\n  );\n\n  const offerInputs = Array.from({ length: numInputs }, () => input);\n  const acceptInputs = Array.from({ length: 1 }, () => input);\n\n  return new DualFundingTxFinalizer(\n    offerInputs,\n    fakeSPK,\n    fakeSPK,\n    acceptInputs,\n    fakeSPK,\n    fakeSPK,\n    feeRate,\n    numContracts,\n  ).offerFees;\n};\n\n/**\n * Selects UTXOs for dual funding\n * @param utxos - UTXOs to select from\n * @param collaterals - Collaterals to fund (just one for non-batch tx)\n * @param feeRate - Fee rate in satoshis per byte\n * @returns Inputs and fee\n * @description\n * Add inputs until we reach or surpass the target value (or deplete)\n * Worst-case: O(n)\n */\nexport const dualFundingCoinSelect = (\n  utxos: UTXO[],\n  collaterals: bigint[], // in satoshis\n  feeRate: bigint,\n): { inputs: UTXO[]; fee: bigint } => {\n  utxos = [...utxos].sort((a, b) =>\n    Number(utxoScore(b, feeRate) - utxoScore(a, feeRate)),\n  );\n\n  let inAccum = 0;\n  const inputs: UTXO[] = [];\n  const outAccum =\n    collaterals.reduce((acc, val) => acc + val, BigInt(0)) +\n    dustThreshold(feeRate); // sum of collaterals\n\n  for (let i = 0; i < utxos.length; ++i) {\n    const utxo = utxos[i];\n    const utxoBytes = inputBytes();\n    const utxoFee = feeRate * utxoBytes;\n    const utxoValue = utxo.value;\n\n    // skip detrimental input\n    if (utxoFee > utxo.value) {\n      if (i === utxos.length - 1)\n        return {\n          fee: dualFees(feeRate, 1, collaterals.length),\n          inputs: [],\n        };\n      continue;\n    }\n\n    inAccum += utxoValue;\n    inputs.push(utxo);\n\n    const fee = dualFees(feeRate, inputs.length, collaterals.length);\n\n    // go again?\n    if (inAccum < outAccum + fee) continue;\n\n    return { inputs, fee };\n  }\n\n  return {\n    fee: dualFees(feeRate, 1, collaterals.length),\n    inputs: [],\n  };\n};\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"750559e5906506954f1592dbea4e87d7354b85ac","contentHash":"93867967e1f62f575f62e93091c0a13c9ea938e80949260c3911bd381748815c"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/TxFinalizer.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/TxFinalizer.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":126}},"2":{"start":{"line":4,"column":20},"end":{"line":4,"column":50}},"3":{"start":{"line":5,"column":21},"end":{"line":5,"column":42}},"4":{"start":{"line":6,"column":34},"end":{"line":6,"column":36}},"5":{"start":{"line":7,"column":28},"end":{"line":7,"column":30}},"6":{"start":{"line":10,"column":8},"end":{"line":10,"column":39}},"7":{"start":{"line":11,"column":8},"end":{"line":11,"column":45}},"8":{"start":{"line":12,"column":8},"end":{"line":12,"column":45}},"9":{"start":{"line":13,"column":8},"end":{"line":13,"column":41}},"10":{"start":{"line":14,"column":8},"end":{"line":14,"column":47}},"11":{"start":{"line":15,"column":8},"end":{"line":15,"column":47}},"12":{"start":{"line":16,"column":8},"end":{"line":16,"column":31}},"13":{"start":{"line":17,"column":8},"end":{"line":17,"column":41}},"14":{"start":{"line":20,"column":8},"end":{"line":23,"column":11}},"15":{"start":{"line":21,"column":12},"end":{"line":22,"column":55}},"16":{"start":{"line":22,"column":16},"end":{"line":22,"column":55}},"17":{"start":{"line":24,"column":23},"end":{"line":24,"column":52}},"18":{"start":{"line":24,"column":46},"end":{"line":24,"column":51}},"19":{"start":{"line":26,"column":32},"end":{"line":26,"column":58}},"20":{"start":{"line":27,"column":32},"end":{"line":31,"column":23}},"21":{"start":{"line":32,"column":26},"end":{"line":32,"column":64}},"22":{"start":{"line":34,"column":28},"end":{"line":36,"column":13}},"23":{"start":{"line":35,"column":12},"end":{"line":35,"column":79}},"24":{"start":{"line":37,"column":31},"end":{"line":37,"column":103}},"25":{"start":{"line":38,"column":29},"end":{"line":38,"column":71}},"26":{"start":{"line":39,"column":23},"end":{"line":39,"column":49}},"27":{"start":{"line":40,"column":23},"end":{"line":40,"column":80}},"28":{"start":{"line":41,"column":27},"end":{"line":41,"column":56}},"29":{"start":{"line":42,"column":8},"end":{"line":42,"column":41}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":111}},"31":{"start":{"line":48,"column":8},"end":{"line":48,"column":114}},"32":{"start":{"line":51,"column":42},"end":{"line":51,"column":61}},"33":{"start":{"line":52,"column":8},"end":{"line":52,"column":38}},"34":{"start":{"line":55,"column":8},"end":{"line":55,"column":45}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":46}},"36":{"start":{"line":61,"column":42},"end":{"line":61,"column":62}},"37":{"start":{"line":62,"column":8},"end":{"line":62,"column":38}},"38":{"start":{"line":65,"column":8},"end":{"line":65,"column":46}},"39":{"start":{"line":68,"column":8},"end":{"line":68,"column":47}},"40":{"start":{"line":71,"column":0},"end":{"line":71,"column":56}},"41":{"start":{"line":74,"column":8},"end":{"line":74,"column":47}},"42":{"start":{"line":75,"column":8},"end":{"line":75,"column":45}},"43":{"start":{"line":76,"column":8},"end":{"line":76,"column":47}},"44":{"start":{"line":77,"column":8},"end":{"line":77,"column":31}},"45":{"start":{"line":80,"column":8},"end":{"line":83,"column":11}},"46":{"start":{"line":81,"column":12},"end":{"line":82,"column":55}},"47":{"start":{"line":82,"column":16},"end":{"line":82,"column":55}},"48":{"start":{"line":84,"column":23},"end":{"line":84,"column":52}},"49":{"start":{"line":84,"column":46},"end":{"line":84,"column":51}},"50":{"start":{"line":86,"column":28},"end":{"line":88,"column":13}},"51":{"start":{"line":87,"column":12},"end":{"line":87,"column":79}},"52":{"start":{"line":89,"column":29},"end":{"line":89,"column":54}},"53":{"start":{"line":90,"column":23},"end":{"line":90,"column":55}},"54":{"start":{"line":91,"column":23},"end":{"line":91,"column":80}},"55":{"start":{"line":92,"column":20},"end":{"line":92,"column":49}},"56":{"start":{"line":93,"column":8},"end":{"line":93,"column":19}},"57":{"start":{"line":96,"column":8},"end":{"line":96,"column":75}},"58":{"start":{"line":99,"column":8},"end":{"line":99,"column":53}},"59":{"start":{"line":102,"column":8},"end":{"line":102,"column":76}},"60":{"start":{"line":105,"column":8},"end":{"line":105,"column":54}},"61":{"start":{"line":108,"column":8},"end":{"line":108,"column":44}},"62":{"start":{"line":111,"column":8},"end":{"line":111,"column":47}},"63":{"start":{"line":114,"column":8},"end":{"line":114,"column":45}},"64":{"start":{"line":117,"column":8},"end":{"line":117,"column":48}},"65":{"start":{"line":120,"column":0},"end":{"line":120,"column":56}},"66":{"start":{"line":121,"column":21},"end":{"line":129,"column":1}},"67":{"start":{"line":122,"column":18},"end":{"line":122,"column":50}},"68":{"start":{"line":123,"column":4},"end":{"line":123,"column":30}},"69":{"start":{"line":124,"column":4},"end":{"line":124,"column":48}},"70":{"start":{"line":125,"column":20},"end":{"line":125,"column":86}},"71":{"start":{"line":126,"column":4},"end":{"line":126,"column":72}},"72":{"start":{"line":126,"column":65},"end":{"line":126,"column":70}},"73":{"start":{"line":127,"column":4},"end":{"line":127,"column":74}},"74":{"start":{"line":127,"column":67},"end":{"line":127,"column":72}},"75":{"start":{"line":128,"column":4},"end":{"line":128,"column":124}},"76":{"start":{"line":130,"column":0},"end":{"line":130,"column":36}},"77":{"start":{"line":131,"column":28},"end":{"line":138,"column":1}},"78":{"start":{"line":132,"column":18},"end":{"line":132,"column":50}},"79":{"start":{"line":133,"column":4},"end":{"line":133,"column":30}},"80":{"start":{"line":134,"column":4},"end":{"line":134,"column":48}},"81":{"start":{"line":135,"column":24},"end":{"line":135,"column":75}},"82":{"start":{"line":135,"column":69},"end":{"line":135,"column":74}},"83":{"start":{"line":136,"column":25},"end":{"line":136,"column":77}},"84":{"start":{"line":136,"column":71},"end":{"line":136,"column":76}},"85":{"start":{"line":137,"column":4},"end":{"line":137,"column":87}},"86":{"start":{"line":139,"column":0},"end":{"line":139,"column":50}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":9,"column":4},"end":{"line":9,"column":5}},"loc":{"start":{"line":9,"column":136},"end":{"line":18,"column":5}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":4},"end":{"line":19,"column":5}},"loc":{"start":{"line":19,"column":61},"end":{"line":43,"column":5}},"line":19},"2":{"name":"(anonymous_2)","decl":{"start":{"line":20,"column":24},"end":{"line":20,"column":25}},"loc":{"start":{"line":20,"column":35},"end":{"line":23,"column":9}},"line":20},"3":{"name":"(anonymous_3)","decl":{"start":{"line":24,"column":35},"end":{"line":24,"column":36}},"loc":{"start":{"line":24,"column":46},"end":{"line":24,"column":51}},"line":24},"4":{"name":"(anonymous_4)","decl":{"start":{"line":34,"column":42},"end":{"line":34,"column":43}},"loc":{"start":{"line":34,"column":60},"end":{"line":36,"column":9}},"line":34},"5":{"name":"(anonymous_5)","decl":{"start":{"line":44,"column":4},"end":{"line":44,"column":5}},"loc":{"start":{"line":44,"column":19},"end":{"line":46,"column":5}},"line":44},"6":{"name":"(anonymous_6)","decl":{"start":{"line":47,"column":4},"end":{"line":47,"column":5}},"loc":{"start":{"line":47,"column":20},"end":{"line":49,"column":5}},"line":47},"7":{"name":"(anonymous_7)","decl":{"start":{"line":50,"column":4},"end":{"line":50,"column":5}},"loc":{"start":{"line":50,"column":20},"end":{"line":53,"column":5}},"line":50},"8":{"name":"(anonymous_8)","decl":{"start":{"line":54,"column":4},"end":{"line":54,"column":5}},"loc":{"start":{"line":54,"column":25},"end":{"line":56,"column":5}},"line":54},"9":{"name":"(anonymous_9)","decl":{"start":{"line":57,"column":4},"end":{"line":57,"column":5}},"loc":{"start":{"line":57,"column":26},"end":{"line":59,"column":5}},"line":57},"10":{"name":"(anonymous_10)","decl":{"start":{"line":60,"column":4},"end":{"line":60,"column":5}},"loc":{"start":{"line":60,"column":21},"end":{"line":63,"column":5}},"line":60},"11":{"name":"(anonymous_11)","decl":{"start":{"line":64,"column":4},"end":{"line":64,"column":5}},"loc":{"start":{"line":64,"column":26},"end":{"line":66,"column":5}},"line":64},"12":{"name":"(anonymous_12)","decl":{"start":{"line":67,"column":4},"end":{"line":67,"column":5}},"loc":{"start":{"line":67,"column":27},"end":{"line":69,"column":5}},"line":67},"13":{"name":"(anonymous_13)","decl":{"start":{"line":73,"column":4},"end":{"line":73,"column":5}},"loc":{"start":{"line":73,"column":75},"end":{"line":78,"column":5}},"line":73},"14":{"name":"(anonymous_14)","decl":{"start":{"line":79,"column":4},"end":{"line":79,"column":5}},"loc":{"start":{"line":79,"column":41},"end":{"line":94,"column":5}},"line":79},"15":{"name":"(anonymous_15)","decl":{"start":{"line":80,"column":24},"end":{"line":80,"column":25}},"loc":{"start":{"line":80,"column":35},"end":{"line":83,"column":9}},"line":80},"16":{"name":"(anonymous_16)","decl":{"start":{"line":84,"column":35},"end":{"line":84,"column":36}},"loc":{"start":{"line":84,"column":46},"end":{"line":84,"column":51}},"line":84},"17":{"name":"(anonymous_17)","decl":{"start":{"line":86,"column":42},"end":{"line":86,"column":43}},"loc":{"start":{"line":86,"column":60},"end":{"line":88,"column":9}},"line":86},"18":{"name":"(anonymous_18)","decl":{"start":{"line":95,"column":4},"end":{"line":95,"column":5}},"loc":{"start":{"line":95,"column":28},"end":{"line":97,"column":5}},"line":95},"19":{"name":"(anonymous_19)","decl":{"start":{"line":98,"column":4},"end":{"line":98,"column":5}},"loc":{"start":{"line":98,"column":31},"end":{"line":100,"column":5}},"line":98},"20":{"name":"(anonymous_20)","decl":{"start":{"line":101,"column":4},"end":{"line":101,"column":5}},"loc":{"start":{"line":101,"column":29},"end":{"line":103,"column":5}},"line":101},"21":{"name":"(anonymous_21)","decl":{"start":{"line":104,"column":4},"end":{"line":104,"column":5}},"loc":{"start":{"line":104,"column":32},"end":{"line":106,"column":5}},"line":104},"22":{"name":"(anonymous_22)","decl":{"start":{"line":107,"column":4},"end":{"line":107,"column":5}},"loc":{"start":{"line":107,"column":29},"end":{"line":109,"column":5}},"line":107},"23":{"name":"(anonymous_23)","decl":{"start":{"line":110,"column":4},"end":{"line":110,"column":5}},"loc":{"start":{"line":110,"column":32},"end":{"line":112,"column":5}},"line":110},"24":{"name":"(anonymous_24)","decl":{"start":{"line":113,"column":4},"end":{"line":113,"column":5}},"loc":{"start":{"line":113,"column":30},"end":{"line":115,"column":5}},"line":113},"25":{"name":"(anonymous_25)","decl":{"start":{"line":116,"column":4},"end":{"line":116,"column":5}},"loc":{"start":{"line":116,"column":33},"end":{"line":118,"column":5}},"line":116},"26":{"name":"(anonymous_26)","decl":{"start":{"line":121,"column":21},"end":{"line":121,"column":22}},"loc":{"start":{"line":121,"column":75},"end":{"line":129,"column":1}},"line":121},"27":{"name":"(anonymous_27)","decl":{"start":{"line":126,"column":59},"end":{"line":126,"column":60}},"loc":{"start":{"line":126,"column":65},"end":{"line":126,"column":70}},"line":126},"28":{"name":"(anonymous_28)","decl":{"start":{"line":127,"column":61},"end":{"line":127,"column":62}},"loc":{"start":{"line":127,"column":67},"end":{"line":127,"column":72}},"line":127},"29":{"name":"(anonymous_29)","decl":{"start":{"line":131,"column":28},"end":{"line":131,"column":29}},"loc":{"start":{"line":131,"column":88},"end":{"line":138,"column":1}},"line":131},"30":{"name":"(anonymous_30)","decl":{"start":{"line":135,"column":63},"end":{"line":135,"column":64}},"loc":{"start":{"line":135,"column":69},"end":{"line":135,"column":74}},"line":135},"31":{"name":"(anonymous_31)","decl":{"start":{"line":136,"column":65},"end":{"line":136,"column":66}},"loc":{"start":{"line":136,"column":71},"end":{"line":136,"column":76}},"line":136}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":118},"end":{"line":9,"column":134}},"type":"default-arg","locations":[{"start":{"line":9,"column":133},"end":{"line":9,"column":134}}],"line":9},"1":{"loc":{"start":{"line":21,"column":12},"end":{"line":22,"column":55}},"type":"if","locations":[{"start":{"line":21,"column":12},"end":{"line":22,"column":55}},{"start":{"line":21,"column":12},"end":{"line":22,"column":55}}],"line":21},"2":{"loc":{"start":{"line":79,"column":27},"end":{"line":79,"column":39}},"type":"default-arg","locations":[{"start":{"line":79,"column":37},"end":{"line":79,"column":39}}],"line":79},"3":{"loc":{"start":{"line":81,"column":12},"end":{"line":82,"column":55}},"type":"if","locations":[{"start":{"line":81,"column":12},"end":{"line":82,"column":55}},{"start":{"line":81,"column":12},"end":{"line":82,"column":55}}],"line":81},"4":{"loc":{"start":{"line":126,"column":18},"end":{"line":126,"column":71}},"type":"binary-expr","locations":[{"start":{"line":126,"column":18},"end":{"line":126,"column":29}},{"start":{"line":126,"column":33},"end":{"line":126,"column":71}}],"line":126},"5":{"loc":{"start":{"line":127,"column":19},"end":{"line":127,"column":73}},"type":"binary-expr","locations":[{"start":{"line":127,"column":19},"end":{"line":127,"column":31}},{"start":{"line":127,"column":35},"end":{"line":127,"column":73}}],"line":127}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":129,"7":129,"8":129,"9":129,"10":129,"11":129,"12":129,"13":129,"14":129,"15":262,"16":0,"17":129,"18":262,"19":129,"20":129,"21":129,"22":129,"23":262,"24":129,"25":129,"26":129,"27":129,"28":129,"29":129,"30":127,"31":2,"32":127,"33":127,"34":0,"35":0,"36":2,"37":2,"38":0,"39":0,"40":1,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":1,"66":1,"67":94,"68":94,"69":94,"70":94,"71":94,"72":0,"73":94,"74":0,"75":94,"76":1,"77":1,"78":94,"79":94,"80":94,"81":94,"82":162,"83":94,"84":112,"85":94,"86":1},"f":{"0":129,"1":129,"2":262,"3":262,"4":262,"5":127,"6":2,"7":127,"8":0,"9":0,"10":2,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":94,"27":0,"28":0,"29":94,"30":162,"31":112},"b":{"0":[0],"1":[0,262],"2":[0],"3":[0,0],"4":[94,0],"5":[94,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/TxFinalizer.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/TxFinalizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { FundingInput, FundingInputV0, MessageType } from '@node-dlc/messaging';\nimport { Decimal } from 'decimal.js';\n\nconst BATCH_FUND_TX_BASE_WEIGHT = 42;\nconst FUNDING_OUTPUT_SIZE = 43;\n\nexport class DualFundingTxFinalizer {\n  constructor(\n    readonly offerInputs: FundingInput[],\n    readonly offerPayoutSPK: Buffer,\n    readonly offerChangeSPK: Buffer,\n    readonly acceptInputs: FundingInput[],\n    readonly acceptPayoutSPK: Buffer,\n    readonly acceptChangeSPK: Buffer,\n    readonly feeRate: bigint,\n    readonly numContracts = 1,\n  ) {}\n\n  private computeFees(\n    _inputs: FundingInput[],\n    payoutSPK: Buffer,\n    changeSPK: Buffer,\n    numContracts: number,\n  ): IFees {\n    _inputs.forEach((input) => {\n      if (input.type !== MessageType.FundingInputV0)\n        throw Error('FundingInput must be V0');\n    });\n    const inputs: FundingInputV0[] = _inputs.map(\n      (input) => input as FundingInputV0,\n    );\n    // https://github.com/discreetlogcontracts/dlcspecs/blob/8ee4bbe816c9881c832b1ce320b9f14c72e3506f/Transactions.md#expected-weight-of-the-contract-execution-or-refund-transaction\n    const futureFeeWeight = 249 + 4 * payoutSPK.length;\n    const futureFeeVBytes = new Decimal(futureFeeWeight)\n      .times(numContracts)\n      .div(4)\n      .ceil()\n      .toNumber();\n    const futureFee = this.feeRate * BigInt(futureFeeVBytes);\n\n    // https://github.com/discreetlogcontracts/dlcspecs/blob/8ee4bbe816c9881c832b1ce320b9f14c72e3506f/Transactions.md#expected-weight-of-the-funding-transaction\n    const inputWeight = inputs.reduce((total, input) => {\n      return total + 164 + input.maxWitnessLen + input.scriptSigLength();\n    }, 0);\n    const contractWeight =\n      (BATCH_FUND_TX_BASE_WEIGHT + FUNDING_OUTPUT_SIZE * numContracts * 4) / 2;\n    const outputWeight = 36 + 4 * changeSPK.length + contractWeight;\n    const weight = outputWeight + inputWeight;\n    const vbytes = new Decimal(weight).div(4).ceil().toNumber();\n    const fundingFee = this.feeRate * BigInt(vbytes);\n\n    return { futureFee, fundingFee };\n  }\n\n  private getOfferFees(): IFees {\n    return this.computeFees(\n      this.offerInputs,\n      this.offerPayoutSPK,\n      this.offerChangeSPK,\n      this.numContracts,\n    );\n  }\n\n  private getAcceptFees(): IFees {\n    return this.computeFees(\n      this.acceptInputs,\n      this.acceptPayoutSPK,\n      this.acceptChangeSPK,\n      this.numContracts,\n    );\n  }\n\n  public get offerFees(): bigint {\n    const { futureFee, fundingFee } = this.getOfferFees();\n    return futureFee + fundingFee;\n  }\n\n  public get offerFutureFee(): bigint {\n    return this.getOfferFees().futureFee;\n  }\n\n  public get offerFundingFee(): bigint {\n    return this.getOfferFees().fundingFee;\n  }\n\n  public get acceptFees(): bigint {\n    const { futureFee, fundingFee } = this.getAcceptFees();\n    return futureFee + fundingFee;\n  }\n\n  public get acceptFutureFee(): bigint {\n    return this.getAcceptFees().futureFee;\n  }\n\n  public get acceptFundingFee(): bigint {\n    return this.getAcceptFees().fundingFee;\n  }\n}\n\nexport class DualClosingTxFinalizer {\n  constructor(\n    readonly initiatorInputs: FundingInput[],\n    readonly offerPayoutSPK: Buffer,\n    readonly acceptPayoutSPK: Buffer,\n    readonly feeRate: bigint,\n  ) {}\n\n  private computeFees(payoutSPK: Buffer, _inputs: FundingInput[] = []): bigint {\n    _inputs.forEach((input) => {\n      if (input.type !== MessageType.FundingInputV0)\n        throw Error('FundingInput must be V0');\n    });\n    const inputs: FundingInputV0[] = _inputs.map(\n      (input) => input as FundingInputV0,\n    );\n    // https://gist.github.com/matthewjablack/08c36baa513af9377508111405b22e03\n    const inputWeight = inputs.reduce((total, input) => {\n      return total + 164 + input.maxWitnessLen + input.scriptSigLength();\n    }, 0);\n    const outputWeight = 36 + 4 * payoutSPK.length;\n    const weight = 213 + outputWeight + inputWeight;\n    const vbytes = new Decimal(weight).div(4).ceil().toNumber();\n    const fee = this.feeRate * BigInt(vbytes);\n\n    return fee;\n  }\n\n  private getOfferInitiatorFees(): bigint {\n    return this.computeFees(this.offerPayoutSPK, this.initiatorInputs);\n  }\n\n  private getOfferReciprocatorFees(): bigint {\n    return this.computeFees(this.offerPayoutSPK);\n  }\n\n  private getAcceptInitiatorFees(): bigint {\n    return this.computeFees(this.acceptPayoutSPK, this.initiatorInputs);\n  }\n\n  private getAcceptReciprocatorFees(): bigint {\n    return this.computeFees(this.acceptPayoutSPK);\n  }\n\n  public get offerInitiatorFees(): bigint {\n    return this.getOfferInitiatorFees();\n  }\n\n  public get offerReciprocatorFees(): bigint {\n    return this.getOfferReciprocatorFees();\n  }\n\n  public get acceptInitiatorFees(): bigint {\n    return this.getAcceptInitiatorFees();\n  }\n\n  public get acceptReciprocatorFees(): bigint {\n    return this.getAcceptReciprocatorFees();\n  }\n}\n\ninterface IFees {\n  futureFee: bigint;\n  fundingFee: bigint;\n}\n\nexport const getFinalizer = (\n  feeRate: bigint,\n  offerInputs?: FundingInputV0[],\n  acceptInputs?: FundingInputV0[],\n  numContracts?: number,\n): DualFundingTxFinalizer => {\n  const input = new FundingInputV0();\n  input.maxWitnessLen = 108;\n  input.redeemScript = Buffer.from('', 'hex');\n\n  const fakeSPK = Buffer.from(\n    '0014663117d27e78eb432505180654e603acb30e8a4a',\n    'hex',\n  );\n\n  offerInputs = offerInputs || Array.from({ length: 1 }, () => input);\n\n  acceptInputs = acceptInputs || Array.from({ length: 1 }, () => input);\n\n  return new DualFundingTxFinalizer(\n    offerInputs,\n    fakeSPK,\n    fakeSPK,\n    acceptInputs,\n    fakeSPK,\n    fakeSPK,\n    feeRate,\n    numContracts,\n  );\n};\n\nexport const getFinalizerByCount = (\n  feeRate: bigint,\n  numOfferInputs: number,\n  numAcceptInputs: number,\n  numContracts: number,\n): DualFundingTxFinalizer => {\n  const input = new FundingInputV0();\n  input.maxWitnessLen = 108;\n  input.redeemScript = Buffer.from('', 'hex');\n\n  const offerInputs = Array.from({ length: numOfferInputs }, () => input);\n  const acceptInputs = Array.from({ length: numAcceptInputs }, () => input);\n  return getFinalizer(feeRate, offerInputs, acceptInputs, numContracts);\n};\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"9e2e034fbe788a422ff437b46d588417af48bb2b","contentHash":"35a697e82de6984160d348aea060f2b50f9484976bd134bef1cae95097fb21b6"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/PayoutCurve.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/PayoutCurve.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}}},"fnMap":{},"branchMap":{},"s":{"0":1},"f":{},"b":{},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/PayoutCurve.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/PayoutCurve.ts"],"names":[],"mappings":"","sourcesContent":["import BigNumber from 'bignumber.js';\n\nexport default interface PayoutCurve {\n  getPayout(x: BigInt): BigNumber;\n  getOutcomeForPayout(y: BigNumber): BigInt;\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"9f8ff4944ab1e85ea692c2ab0d67bf71cd955704","contentHash":"f0f92465bd847b4ae6d2a12980ab2cda5edcb1f3e291b538b2e327005878a044"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/PolynomialPayoutCurve.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/PolynomialPayoutCurve.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":39}},"4":{"start":{"line":7,"column":20},"end":{"line":7,"column":50}},"5":{"start":{"line":8,"column":23},"end":{"line":8,"column":63}},"6":{"start":{"line":9,"column":20},"end":{"line":9,"column":49}},"7":{"start":{"line":10,"column":24},"end":{"line":10,"column":50}},"8":{"start":{"line":13,"column":8},"end":{"line":14,"column":52}},"9":{"start":{"line":14,"column":12},"end":{"line":14,"column":52}},"10":{"start":{"line":15,"column":8},"end":{"line":15,"column":29}},"11":{"start":{"line":16,"column":8},"end":{"line":16,"column":30}},"12":{"start":{"line":17,"column":8},"end":{"line":17,"column":47}},"13":{"start":{"line":19,"column":8},"end":{"line":21,"column":68}},"14":{"start":{"line":29,"column":32},"end":{"line":29,"column":36}},"15":{"start":{"line":30,"column":18},"end":{"line":30,"column":61}},"16":{"start":{"line":32,"column":23},"end":{"line":32,"column":75}},"17":{"start":{"line":33,"column":8},"end":{"line":33,"column":22}},"18":{"start":{"line":41,"column":32},"end":{"line":41,"column":36}},"19":{"start":{"line":42,"column":18},"end":{"line":42,"column":60}},"20":{"start":{"line":46,"column":24},"end":{"line":50,"column":27}},"21":{"start":{"line":51,"column":8},"end":{"line":51,"column":42}},"22":{"start":{"line":58,"column":27},"end":{"line":58,"column":31}},"23":{"start":{"line":59,"column":22},"end":{"line":59,"column":66}},"24":{"start":{"line":60,"column":8},"end":{"line":65,"column":11}},"25":{"start":{"line":61,"column":33},"end":{"line":61,"column":65}},"26":{"start":{"line":62,"column":34},"end":{"line":62,"column":65}},"27":{"start":{"line":63,"column":35},"end":{"line":63,"column":78}},"28":{"start":{"line":64,"column":12},"end":{"line":64,"column":67}},"29":{"start":{"line":66,"column":8},"end":{"line":66,"column":21}},"30":{"start":{"line":74,"column":8},"end":{"line":78,"column":11}},"31":{"start":{"line":75,"column":31},"end":{"line":75,"column":46}},"32":{"start":{"line":76,"column":12},"end":{"line":77,"column":52}},"33":{"start":{"line":86,"column":23},"end":{"line":90,"column":10}},"34":{"start":{"line":87,"column":28},"end":{"line":87,"column":85}},"35":{"start":{"line":88,"column":27},"end":{"line":88,"column":144}},"36":{"start":{"line":89,"column":12},"end":{"line":89,"column":39}},"37":{"start":{"line":91,"column":8},"end":{"line":91,"column":49}},"38":{"start":{"line":101,"column":8},"end":{"line":102,"column":60}},"39":{"start":{"line":102,"column":12},"end":{"line":102,"column":60}},"40":{"start":{"line":103,"column":8},"end":{"line":106,"column":11}},"41":{"start":{"line":104,"column":12},"end":{"line":105,"column":75}},"42":{"start":{"line":105,"column":16},"end":{"line":105,"column":75}},"43":{"start":{"line":107,"column":21},"end":{"line":107,"column":23}},"44":{"start":{"line":109,"column":37},"end":{"line":109,"column":61}},"45":{"start":{"line":110,"column":22},"end":{"line":110,"column":65}},"46":{"start":{"line":111,"column":8},"end":{"line":111,"column":246}},"47":{"start":{"line":113,"column":8},"end":{"line":117,"column":9}},"48":{"start":{"line":113,"column":21},"end":{"line":113,"column":22}},"49":{"start":{"line":114,"column":41},"end":{"line":114,"column":65}},"50":{"start":{"line":115,"column":26},"end":{"line":115,"column":69}},"51":{"start":{"line":116,"column":12},"end":{"line":116,"column":276}},"52":{"start":{"line":118,"column":8},"end":{"line":118,"column":55}},"53":{"start":{"line":121,"column":0},"end":{"line":121,"column":54}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"loc":{"start":{"line":12,"column":24},"end":{"line":22,"column":5}},"line":12},"2":{"name":"(anonymous_2)","decl":{"start":{"line":28,"column":4},"end":{"line":28,"column":5}},"loc":{"start":{"line":28,"column":23},"end":{"line":34,"column":5}},"line":28},"3":{"name":"(anonymous_3)","decl":{"start":{"line":40,"column":4},"end":{"line":40,"column":5}},"loc":{"start":{"line":40,"column":32},"end":{"line":52,"column":5}},"line":40},"4":{"name":"(anonymous_4)","decl":{"start":{"line":57,"column":4},"end":{"line":57,"column":5}},"loc":{"start":{"line":57,"column":25},"end":{"line":67,"column":5}},"line":57},"5":{"name":"(anonymous_5)","decl":{"start":{"line":60,"column":34},"end":{"line":60,"column":35}},"loc":{"start":{"line":60,"column":45},"end":{"line":65,"column":9}},"line":60},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":4},"end":{"line":73,"column":5}},"loc":{"start":{"line":73,"column":18},"end":{"line":79,"column":5}},"line":73},"7":{"name":"(anonymous_7)","decl":{"start":{"line":74,"column":33},"end":{"line":74,"column":34}},"loc":{"start":{"line":74,"column":47},"end":{"line":78,"column":9}},"line":74},"8":{"name":"(anonymous_8)","decl":{"start":{"line":85,"column":4},"end":{"line":85,"column":5}},"loc":{"start":{"line":85,"column":39},"end":{"line":92,"column":5}},"line":85},"9":{"name":"(anonymous_9)","decl":{"start":{"line":86,"column":40},"end":{"line":86,"column":41}},"loc":{"start":{"line":86,"column":51},"end":{"line":90,"column":9}},"line":86},"10":{"name":"(anonymous_10)","decl":{"start":{"line":100,"column":4},"end":{"line":100,"column":5}},"loc":{"start":{"line":100,"column":78},"end":{"line":119,"column":5}},"line":100},"11":{"name":"(anonymous_11)","decl":{"start":{"line":103,"column":38},"end":{"line":103,"column":39}},"loc":{"start":{"line":103,"column":49},"end":{"line":106,"column":9}},"line":103}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":13,"column":8},"end":{"line":14,"column":52}},"type":"if","locations":[{"start":{"line":13,"column":8},"end":{"line":14,"column":52}},{"start":{"line":13,"column":8},"end":{"line":14,"column":52}}],"line":13},"4":{"loc":{"start":{"line":76,"column":20},"end":{"line":77,"column":50}},"type":"binary-expr","locations":[{"start":{"line":76,"column":20},"end":{"line":76,"column":56}},{"start":{"line":77,"column":16},"end":{"line":77,"column":50}}],"line":76},"5":{"loc":{"start":{"line":101,"column":8},"end":{"line":102,"column":60}},"type":"if","locations":[{"start":{"line":101,"column":8},"end":{"line":102,"column":60}},{"start":{"line":101,"column":8},"end":{"line":102,"column":60}}],"line":101},"6":{"loc":{"start":{"line":104,"column":12},"end":{"line":105,"column":75}},"type":"if","locations":[{"start":{"line":104,"column":12},"end":{"line":105,"column":75}},{"start":{"line":104,"column":12},"end":{"line":105,"column":75}}],"line":104}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":288,"9":1,"10":287,"11":287,"12":287,"13":287,"14":34,"15":34,"16":34,"17":34,"18":58,"19":58,"20":58,"21":58,"22":271,"23":271,"24":271,"25":542,"26":542,"27":542,"28":542,"29":271,"30":2,"31":4,"32":4,"33":7,"34":14,"35":14,"36":14,"37":7,"38":4,"39":1,"40":3,"41":7,"42":1,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":4,"50":4,"51":4,"52":2,"53":1},"f":{"0":1,"1":288,"2":34,"3":58,"4":271,"5":542,"6":2,"7":4,"8":7,"9":14,"10":4,"11":7},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1],"3":[1,287],"4":[4,3],"5":[1,3],"6":[1,6]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/PolynomialPayoutCurve.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/PolynomialPayoutCurve.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n  MessageType,\n  PayoutFunctionV0,\n  PolynomialPayoutCurvePiece,\n  RoundingIntervalsV0,\n} from '@node-dlc/messaging';\nimport BigNumber from 'bignumber.js';\n\nimport { fromPrecision, getPrecision } from '../utils/Precision';\nimport { CETPayout, mergePayouts, splitIntoRanges } from './CETCalculator';\n\ninterface DlcPoint {\n  outcome: BigNumber;\n  payout: BigNumber;\n}\n\nexport class PolynomialPayoutCurve {\n  private readonly points: DlcPoint[];\n  private readonly slope: BigNumber;\n  private readonly left: DlcPoint;\n  private readonly right: DlcPoint;\n\n  constructor(points: DlcPoint[]) {\n    if (points.length !== 2) throw new Error('Must have two points');\n    this.points = points;\n    this.left = points[0];\n    this.right = points[points.length - 1];\n\n    // m = (y2 - y1) / (x2 - x1)\n    this.slope = this.right.payout\n      .minus(this.left.payout)\n      .dividedBy(this.right.outcome.minus(this.left.outcome));\n  }\n\n  /**\n   * Get the payout for a given outcome\n   * @param outcome The outcome to get the payout for\n   * @returns The payout for the outcome\n   */\n  getPayout(outcome: bigint): BigNumber {\n    const { left, slope } = this;\n\n    const x = new BigNumber(Number(outcome));\n\n    // y = mx + b\n    const payout = slope.times(x.minus(left.outcome)).plus(left.payout);\n\n    return payout;\n  }\n\n  /**\n   * Get the outcome for a given payout\n   * @param payout The payout to get the outcome for\n   * @returns The outcome for the payout\n   */\n  getOutcomeForPayout(payout: BigNumber): bigint {\n    const { left, slope } = this;\n    const y = new BigNumber(Number(payout));\n\n    // Find the x value for the given y\n    // slope = (y2 - y1) / (x2 - x1)\n    // x1 = (y2 - y1) / slope + x2\n    const outcome = y\n      .minus(left.payout)\n      .dividedBy(slope)\n      .plus(left.outcome)\n      .integerValue();\n    return BigInt(outcome.toString());\n  }\n\n  /**\n   * Serializes PolynomialPayoutCurve to a PolynomialPayoutCurvePiece (for transport)\n   * @returns A PolynomialPayoutCurvePiece\n   */\n  toPayoutCurvePiece(): PolynomialPayoutCurvePiece {\n    const { points } = this;\n\n    const piece = new PolynomialPayoutCurvePiece();\n\n    piece.points = points.map((point) => {\n      const eventOutcome = BigInt(point.outcome.toString());\n      const outcomePayout = BigInt(point.payout.toString());\n      const extraPrecision = getPrecision(point.payout);\n      return { eventOutcome, outcomePayout, extraPrecision };\n    });\n\n    return piece;\n  }\n\n  /**\n   * Determine if the payout curve is equal to another\n   * @param curve A PolynomialPayoutCurve\n   * @returns True if the curves are the same\n   */\n  equals(curve: PolynomialPayoutCurve): boolean {\n    return this.points.every((point, i) => {\n      const otherPoint = curve.points[i];\n      return (\n        point.outcome.eq(otherPoint.outcome) &&\n        point.payout.eq(otherPoint.payout)\n      );\n    });\n  }\n\n  /**\n   * Creates a PolynomialPayoutCurve from a PolynomialPayoutCurvePiece\n   * @param piece\n   * @returns A PolynomialPayoutCurve\n   */\n  static fromPayoutCurvePiece(\n    piece: PolynomialPayoutCurvePiece,\n  ): PolynomialPayoutCurve {\n    const points = piece.points.map((point) => {\n      const outcome = new BigNumber(point.eventOutcome.toString());\n      const payout = new BigNumber(point.outcomePayout.toString()).plus(\n        fromPrecision(point.extraPrecision),\n      );\n      return { outcome, payout };\n    });\n    return new PolynomialPayoutCurve(points);\n  }\n\n  /**\n   * Computes all CETs for a given payout curve\n   * @param payoutFunction The payout function\n   * @param totalCollateral The total collateral\n   * @param roundingIntervals The rounding intervals\n   * @returns A list of CETs\n   */\n  static computePayouts(\n    payoutFunction: PayoutFunctionV0,\n    totalCollateral: bigint,\n    roundingIntervals: RoundingIntervalsV0,\n  ): CETPayout[] {\n    if (payoutFunction.pieces.length < 1)\n      throw new Error('Must have at least one piece');\n\n    payoutFunction.pieces.forEach((piece) => {\n      if (\n        piece.payoutCurvePiece.type !== MessageType.PolynomialPayoutCurvePiece\n      )\n        throw new Error('Payout curve piece must be a polynomial');\n    });\n\n    const CETS: CETPayout[] = [];\n\n    // 1. Add the first piece to the list\n    const { payoutCurvePiece } = payoutFunction.pieces[0];\n\n    const curve = this.fromPayoutCurvePiece(\n      payoutCurvePiece as PolynomialPayoutCurvePiece,\n    );\n\n    CETS.push(\n      ...splitIntoRanges(\n        payoutFunction.endpoint0,\n        payoutFunction.pieces[0].endpoint,\n        payoutFunction.endpointPayout0,\n        payoutFunction.pieces[0].endpointPayout,\n        totalCollateral,\n        curve,\n        roundingIntervals.intervals,\n      ),\n    );\n\n    // 2. If there are subsequent pieces, add them to the list\n    for (let i = 1; i < payoutFunction.pieces.length; i++) {\n      const { payoutCurvePiece } = payoutFunction.pieces[i];\n\n      const curve = this.fromPayoutCurvePiece(\n        payoutCurvePiece as PolynomialPayoutCurvePiece,\n      );\n\n      CETS.push(\n        ...splitIntoRanges(\n          payoutFunction.pieces[i - 1].endpoint,\n          payoutFunction.pieces[i].endpoint,\n          payoutFunction.pieces[i - 1].endpointPayout,\n          payoutFunction.pieces[i].endpointPayout,\n          totalCollateral,\n          curve,\n          roundingIntervals.intervals,\n        ),\n      );\n    }\n\n    return mergePayouts(CETS);\n  }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"51e1b9a05419a56be02ae345335efe686a00591d","contentHash":"9541dc9534a028574ad23feb11275c20cf6e847246fb5baed869e0e3f565995c"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/TxBuilder.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/TxBuilder.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":58}},"4":{"start":{"line":7,"column":18},"end":{"line":7,"column":46}},"5":{"start":{"line":8,"column":20},"end":{"line":8,"column":50}},"6":{"start":{"line":9,"column":21},"end":{"line":9,"column":59}},"7":{"start":{"line":10,"column":22},"end":{"line":10,"column":46}},"8":{"start":{"line":13,"column":8},"end":{"line":13,"column":33}},"9":{"start":{"line":14,"column":8},"end":{"line":14,"column":35}},"10":{"start":{"line":17,"column":26},"end":{"line":17,"column":82}},"11":{"start":{"line":18,"column":8},"end":{"line":18,"column":51}},"12":{"start":{"line":21,"column":0},"end":{"line":21,"column":36}},"13":{"start":{"line":24,"column":8},"end":{"line":24,"column":35}},"14":{"start":{"line":25,"column":8},"end":{"line":25,"column":37}},"15":{"start":{"line":28,"column":19},"end":{"line":28,"column":44}},"16":{"start":{"line":29,"column":8},"end":{"line":29,"column":23}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":48}},"18":{"start":{"line":31,"column":8},"end":{"line":32,"column":76}},"19":{"start":{"line":32,"column":12},"end":{"line":32,"column":76}},"20":{"start":{"line":33,"column":8},"end":{"line":34,"column":55}},"21":{"start":{"line":34,"column":12},"end":{"line":34,"column":55}},"22":{"start":{"line":35,"column":8},"end":{"line":36,"column":56}},"23":{"start":{"line":36,"column":12},"end":{"line":36,"column":56}},"24":{"start":{"line":38,"column":8},"end":{"line":38,"column":39}},"25":{"start":{"line":39,"column":32},"end":{"line":39,"column":34}},"26":{"start":{"line":40,"column":8},"end":{"line":46,"column":9}},"27":{"start":{"line":40,"column":21},"end":{"line":40,"column":22}},"28":{"start":{"line":41,"column":26},"end":{"line":41,"column":43}},"29":{"start":{"line":42,"column":27},"end":{"line":42,"column":45}},"30":{"start":{"line":43,"column":12},"end":{"line":45,"column":91}},"31":{"start":{"line":47,"column":27},"end":{"line":47,"column":110}},"32":{"start":{"line":47,"column":67},"end":{"line":47,"column":109}},"33":{"start":{"line":48,"column":26},"end":{"line":48,"column":306}},"34":{"start":{"line":49,"column":8},"end":{"line":52,"column":11}},"35":{"start":{"line":50,"column":12},"end":{"line":51,"column":55}},"36":{"start":{"line":51,"column":16},"end":{"line":51,"column":55}},"37":{"start":{"line":53,"column":35},"end":{"line":53,"column":88}},"38":{"start":{"line":53,"column":82},"end":{"line":53,"column":87}},"39":{"start":{"line":54,"column":34},"end":{"line":56,"column":21}},"40":{"start":{"line":55,"column":12},"end":{"line":55,"column":77}},"41":{"start":{"line":57,"column":35},"end":{"line":59,"column":21}},"42":{"start":{"line":58,"column":12},"end":{"line":58,"column":77}},"43":{"start":{"line":60,"column":30},"end":{"line":63,"column":9}},"44":{"start":{"line":64,"column":8},"end":{"line":64,"column":88}},"45":{"start":{"line":64,"column":37},"end":{"line":64,"column":86}},"46":{"start":{"line":65,"column":8},"end":{"line":67,"column":11}},"47":{"start":{"line":66,"column":12},"end":{"line":66,"column":110}},"48":{"start":{"line":68,"column":27},"end":{"line":68,"column":116}},"49":{"start":{"line":68,"column":67},"end":{"line":68,"column":104}},"50":{"start":{"line":69,"column":28},"end":{"line":69,"column":121}},"51":{"start":{"line":69,"column":70},"end":{"line":69,"column":109}},"52":{"start":{"line":70,"column":28},"end":{"line":74,"column":10}},"53":{"start":{"line":71,"column":31},"end":{"line":71,"column":60}},"54":{"start":{"line":72,"column":32},"end":{"line":72,"column":75}},"55":{"start":{"line":73,"column":12},"end":{"line":73,"column":44}},"56":{"start":{"line":75,"column":30},"end":{"line":87,"column":10}},"57":{"start":{"line":76,"column":43},"end":{"line":79,"column":27}},"58":{"start":{"line":80,"column":45},"end":{"line":83,"column":27}},"59":{"start":{"line":84,"column":12},"end":{"line":86,"column":73}},"60":{"start":{"line":88,"column":33},"end":{"line":88,"column":85}},"61":{"start":{"line":89,"column":34},"end":{"line":89,"column":89}},"62":{"start":{"line":90,"column":24},"end":{"line":90,"column":26}},"63":{"start":{"line":91,"column":8},"end":{"line":97,"column":11}},"64":{"start":{"line":92,"column":12},"end":{"line":96,"column":15}},"65":{"start":{"line":98,"column":8},"end":{"line":102,"column":11}},"66":{"start":{"line":103,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":108,"column":8},"end":{"line":108,"column":72}},"68":{"start":{"line":108,"column":31},"end":{"line":108,"column":70}},"69":{"start":{"line":109,"column":8},"end":{"line":111,"column":11}},"70":{"start":{"line":110,"column":12},"end":{"line":110,"column":54}},"71":{"start":{"line":112,"column":8},"end":{"line":112,"column":25}},"72":{"start":{"line":116,"column":37},"end":{"line":116,"column":118}},"73":{"start":{"line":116,"column":84},"end":{"line":116,"column":117}},"74":{"start":{"line":117,"column":8},"end":{"line":122,"column":9}},"75":{"start":{"line":117,"column":21},"end":{"line":117,"column":22}},"76":{"start":{"line":118,"column":34},"end":{"line":118,"column":115}},"77":{"start":{"line":118,"column":81},"end":{"line":118,"column":114}},"78":{"start":{"line":119,"column":12},"end":{"line":121,"column":13}},"79":{"start":{"line":120,"column":16},"end":{"line":120,"column":112}},"80":{"start":{"line":124,"column":38},"end":{"line":124,"column":120}},"81":{"start":{"line":124,"column":86},"end":{"line":124,"column":119}},"82":{"start":{"line":125,"column":8},"end":{"line":130,"column":9}},"83":{"start":{"line":125,"column":21},"end":{"line":125,"column":22}},"84":{"start":{"line":126,"column":34},"end":{"line":126,"column":116}},"85":{"start":{"line":126,"column":82},"end":{"line":126,"column":115}},"86":{"start":{"line":127,"column":12},"end":{"line":129,"column":13}},"87":{"start":{"line":128,"column":16},"end":{"line":128,"column":114}},"88":{"start":{"line":133,"column":8},"end":{"line":134,"column":25}},"89":{"start":{"line":134,"column":12},"end":{"line":134,"column":25}},"90":{"start":{"line":135,"column":8},"end":{"line":138,"column":9}},"91":{"start":{"line":135,"column":21},"end":{"line":135,"column":22}},"92":{"start":{"line":136,"column":12},"end":{"line":137,"column":29}},"93":{"start":{"line":137,"column":16},"end":{"line":137,"column":29}},"94":{"start":{"line":139,"column":8},"end":{"line":139,"column":20}},"95":{"start":{"line":142,"column":0},"end":{"line":142,"column":46}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"loc":{"start":{"line":12,"column":37},"end":{"line":15,"column":5}},"line":12},"2":{"name":"(anonymous_2)","decl":{"start":{"line":16,"column":4},"end":{"line":16,"column":5}},"loc":{"start":{"line":16,"column":30},"end":{"line":19,"column":5}},"line":16},"3":{"name":"(anonymous_3)","decl":{"start":{"line":23,"column":4},"end":{"line":23,"column":5}},"loc":{"start":{"line":23,"column":39},"end":{"line":26,"column":5}},"line":23},"4":{"name":"(anonymous_4)","decl":{"start":{"line":27,"column":4},"end":{"line":27,"column":5}},"loc":{"start":{"line":27,"column":30},"end":{"line":113,"column":5}},"line":27},"5":{"name":"(anonymous_5)","decl":{"start":{"line":47,"column":47},"end":{"line":47,"column":48}},"loc":{"start":{"line":47,"column":67},"end":{"line":47,"column":109}},"line":47},"6":{"name":"(anonymous_6)","decl":{"start":{"line":49,"column":48},"end":{"line":49,"column":49}},"loc":{"start":{"line":49,"column":59},"end":{"line":52,"column":9}},"line":49},"7":{"name":"(anonymous_7)","decl":{"start":{"line":53,"column":71},"end":{"line":53,"column":72}},"loc":{"start":{"line":53,"column":82},"end":{"line":53,"column":87}},"line":53},"8":{"name":"(anonymous_8)","decl":{"start":{"line":54,"column":60},"end":{"line":54,"column":61}},"loc":{"start":{"line":54,"column":78},"end":{"line":56,"column":9}},"line":54},"9":{"name":"(anonymous_9)","decl":{"start":{"line":57,"column":75},"end":{"line":57,"column":76}},"loc":{"start":{"line":57,"column":93},"end":{"line":59,"column":9}},"line":57},"10":{"name":"(anonymous_10)","decl":{"start":{"line":64,"column":27},"end":{"line":64,"column":28}},"loc":{"start":{"line":64,"column":37},"end":{"line":64,"column":86}},"line":64},"11":{"name":"(anonymous_11)","decl":{"start":{"line":65,"column":30},"end":{"line":65,"column":31}},"loc":{"start":{"line":65,"column":41},"end":{"line":67,"column":9}},"line":65},"12":{"name":"(anonymous_12)","decl":{"start":{"line":68,"column":49},"end":{"line":68,"column":50}},"loc":{"start":{"line":68,"column":67},"end":{"line":68,"column":104}},"line":68},"13":{"name":"(anonymous_13)","decl":{"start":{"line":69,"column":51},"end":{"line":69,"column":52}},"loc":{"start":{"line":69,"column":70},"end":{"line":69,"column":109}},"line":69},"14":{"name":"(anonymous_14)","decl":{"start":{"line":70,"column":47},"end":{"line":70,"column":48}},"loc":{"start":{"line":70,"column":61},"end":{"line":74,"column":9}},"line":70},"15":{"name":"(anonymous_15)","decl":{"start":{"line":75,"column":46},"end":{"line":75,"column":47}},"loc":{"start":{"line":75,"column":62},"end":{"line":87,"column":9}},"line":75},"16":{"name":"(anonymous_16)","decl":{"start":{"line":91,"column":27},"end":{"line":91,"column":28}},"loc":{"start":{"line":91,"column":45},"end":{"line":97,"column":9}},"line":91},"17":{"name":"(anonymous_17)","decl":{"start":{"line":108,"column":21},"end":{"line":108,"column":22}},"loc":{"start":{"line":108,"column":31},"end":{"line":108,"column":70}},"line":108},"18":{"name":"(anonymous_18)","decl":{"start":{"line":109,"column":24},"end":{"line":109,"column":25}},"loc":{"start":{"line":109,"column":36},"end":{"line":111,"column":9}},"line":109},"19":{"name":"(anonymous_19)","decl":{"start":{"line":114,"column":4},"end":{"line":114,"column":5}},"loc":{"start":{"line":114,"column":30},"end":{"line":131,"column":5}},"line":114},"20":{"name":"(anonymous_20)","decl":{"start":{"line":116,"column":73},"end":{"line":116,"column":74}},"loc":{"start":{"line":116,"column":84},"end":{"line":116,"column":117}},"line":116},"21":{"name":"(anonymous_21)","decl":{"start":{"line":118,"column":70},"end":{"line":118,"column":71}},"loc":{"start":{"line":118,"column":81},"end":{"line":118,"column":114}},"line":118},"22":{"name":"(anonymous_22)","decl":{"start":{"line":124,"column":75},"end":{"line":124,"column":76}},"loc":{"start":{"line":124,"column":86},"end":{"line":124,"column":119}},"line":124},"23":{"name":"(anonymous_23)","decl":{"start":{"line":126,"column":71},"end":{"line":126,"column":72}},"loc":{"start":{"line":126,"column":82},"end":{"line":126,"column":115}},"line":126},"24":{"name":"(anonymous_24)","decl":{"start":{"line":132,"column":4},"end":{"line":132,"column":5}},"loc":{"start":{"line":132,"column":28},"end":{"line":140,"column":5}},"line":132}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":31,"column":8},"end":{"line":32,"column":76}},"type":"if","locations":[{"start":{"line":31,"column":8},"end":{"line":32,"column":76}},{"start":{"line":31,"column":8},"end":{"line":32,"column":76}}],"line":31},"4":{"loc":{"start":{"line":33,"column":8},"end":{"line":34,"column":55}},"type":"if","locations":[{"start":{"line":33,"column":8},"end":{"line":34,"column":55}},{"start":{"line":33,"column":8},"end":{"line":34,"column":55}}],"line":33},"5":{"loc":{"start":{"line":35,"column":8},"end":{"line":36,"column":56}},"type":"if","locations":[{"start":{"line":35,"column":8},"end":{"line":36,"column":56}},{"start":{"line":35,"column":8},"end":{"line":36,"column":56}}],"line":35},"6":{"loc":{"start":{"line":43,"column":33},"end":{"line":45,"column":89}},"type":"cond-expr","locations":[{"start":{"line":44,"column":18},"end":{"line":44,"column":89}},{"start":{"line":45,"column":18},"end":{"line":45,"column":89}}],"line":43},"7":{"loc":{"start":{"line":50,"column":12},"end":{"line":51,"column":55}},"type":"if","locations":[{"start":{"line":50,"column":12},"end":{"line":51,"column":55}},{"start":{"line":50,"column":12},"end":{"line":51,"column":55}}],"line":50},"8":{"loc":{"start":{"line":119,"column":12},"end":{"line":121,"column":13}},"type":"if","locations":[{"start":{"line":119,"column":12},"end":{"line":121,"column":13}},{"start":{"line":119,"column":12},"end":{"line":121,"column":13}}],"line":119},"9":{"loc":{"start":{"line":127,"column":12},"end":{"line":129,"column":13}},"type":"if","locations":[{"start":{"line":127,"column":12},"end":{"line":129,"column":13}},{"start":{"line":127,"column":12},"end":{"line":129,"column":13}}],"line":127},"10":{"loc":{"start":{"line":133,"column":8},"end":{"line":134,"column":25}},"type":"if","locations":[{"start":{"line":133,"column":8},"end":{"line":134,"column":25}},{"start":{"line":133,"column":8},"end":{"line":134,"column":25}}],"line":133},"11":{"loc":{"start":{"line":136,"column":12},"end":{"line":137,"column":29}},"type":"if","locations":[{"start":{"line":136,"column":12},"end":{"line":137,"column":29}},{"start":{"line":136,"column":12},"end":{"line":137,"column":29}}],"line":136}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":1},"f":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/TxBuilder.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/TxBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n  LockTime,\n  OutPoint,\n  Script,\n  Tx,\n  TxBuilder,\n  Value,\n} from '@node-dlc/bitcoin';\nimport {\n  DlcAcceptWithoutSigs,\n  DlcOfferV0,\n  FundingInputV0,\n  MessageType,\n} from '@node-dlc/messaging';\nimport Decimal from 'decimal.js';\n\nimport { DualFundingTxFinalizer } from './TxFinalizer';\n\nexport class DlcTxBuilder {\n  constructor(\n    readonly dlcOffer: DlcOfferV0,\n    readonly dlcAccept: DlcAcceptWithoutSigs,\n  ) {}\n\n  public buildFundingTransaction(): Tx {\n    const txBuilder = new BatchDlcTxBuilder([this.dlcOffer], [this.dlcAccept]);\n    return txBuilder.buildFundingTransaction();\n  }\n}\n\nexport class BatchDlcTxBuilder {\n  constructor(\n    readonly dlcOffers: DlcOfferV0[],\n    readonly dlcAccepts: DlcAcceptWithoutSigs[],\n  ) {}\n\n  public buildFundingTransaction(): Tx {\n    const tx = new TxBuilder();\n    tx.version = 2;\n    tx.locktime = LockTime.zero();\n\n    if (this.dlcOffers.length !== this.dlcAccepts.length)\n      throw Error('DlcOffers and DlcAccepts must be the same length');\n    if (this.dlcOffers.length === 0) throw Error('DlcOffers must not be empty');\n    if (this.dlcAccepts.length === 0)\n      throw Error('DlcAccepts must not be empty');\n\n    // Ensure all DLC offers and accepts have the same funding inputs\n    this.ensureSameFundingInputs();\n\n    const multisigScripts: Script[] = [];\n    for (let i = 0; i < this.dlcOffers.length; i++) {\n      const offer = this.dlcOffers[i];\n      const accept = this.dlcAccepts[i];\n\n      multisigScripts.push(\n        Buffer.compare(offer.fundingPubKey, accept.fundingPubKey) === -1\n          ? Script.p2msLock(2, offer.fundingPubKey, accept.fundingPubKey)\n          : Script.p2msLock(2, accept.fundingPubKey, offer.fundingPubKey),\n      );\n    }\n\n    const witScripts = multisigScripts.map((multisigScript) =>\n      Script.p2wshLock(multisigScript),\n    );\n\n    const finalizer = new DualFundingTxFinalizer(\n      this.dlcOffers[0].fundingInputs,\n      this.dlcOffers[0].payoutSPK,\n      this.dlcOffers[0].changeSPK,\n      this.dlcAccepts[0].fundingInputs,\n      this.dlcAccepts[0].payoutSPK,\n      this.dlcAccepts[0].changeSPK,\n      this.dlcOffers[0].feeRatePerVb,\n      this.dlcOffers.length,\n    );\n\n    this.dlcOffers[0].fundingInputs.forEach((input) => {\n      if (input.type !== MessageType.FundingInputV0)\n        throw Error('FundingInput must be V0');\n    });\n    const offerFundingInputs: FundingInputV0[] = this.dlcOffers[0].fundingInputs.map(\n      (input) => input as FundingInputV0,\n    );\n\n    const offerTotalFunding = offerFundingInputs.reduce((total, input) => {\n      return total + input.prevTx.outputs[input.prevTxVout].value.sats;\n    }, BigInt(0));\n\n    const acceptTotalFunding = this.dlcAccepts[0].fundingInputs.reduce(\n      (total, input) => {\n        return total + input.prevTx.outputs[input.prevTxVout].value.sats;\n      },\n      BigInt(0),\n    );\n\n    const fundingInputs: FundingInputV0[] = [\n      ...offerFundingInputs,\n      ...this.dlcAccepts[0].fundingInputs,\n    ];\n\n    fundingInputs.sort(\n      (a, b) => Number(a.inputSerialId) - Number(b.inputSerialId),\n    );\n\n    fundingInputs.forEach((input) => {\n      tx.addInput(\n        OutPoint.fromString(\n          `${input.prevTx.txId.toString()}:${input.prevTxVout}`,\n        ),\n      );\n    });\n\n    const offerInput = this.dlcOffers.reduce(\n      (total, offer) => total + offer.offerCollateralSatoshis,\n      BigInt(0),\n    );\n    const acceptInput = this.dlcAccepts.reduce(\n      (total, accept) => total + accept.acceptCollateralSatoshis,\n      BigInt(0),\n    );\n\n    const totalInputs = this.dlcOffers.map((offer, i) => {\n      const offerInput = offer.offerCollateralSatoshis;\n      const acceptInput = this.dlcAccepts[i].acceptCollateralSatoshis;\n      return offerInput + acceptInput;\n    });\n\n    const fundingValues = totalInputs.map((totalInput) => {\n      const offerFutureFeePerOffer = new Decimal(\n        finalizer.offerFutureFee.toString(),\n      )\n        .div(this.dlcOffers.length)\n        .ceil()\n        .toNumber();\n      const acceptFutureFeePerAccept = new Decimal(\n        finalizer.acceptFutureFee.toString(),\n      )\n        .div(this.dlcAccepts.length)\n        .ceil()\n        .toNumber();\n\n      return (\n        totalInput +\n        Value.fromSats(offerFutureFeePerOffer).sats +\n        Value.fromSats(acceptFutureFeePerAccept).sats\n      );\n    });\n\n    const offerChangeValue =\n      offerTotalFunding - offerInput - finalizer.offerFees;\n    const acceptChangeValue =\n      acceptTotalFunding - acceptInput - finalizer.acceptFees;\n\n    const outputs: Output[] = [];\n    witScripts.forEach((witScript, i) => {\n      outputs.push({\n        value: Value.fromSats(Number(fundingValues[i])),\n        script: witScript,\n        serialId: this.dlcOffers[i].fundOutputSerialId,\n      });\n    });\n    outputs.push({\n      value: Value.fromSats(Number(offerChangeValue)),\n      script: Script.p2wpkhLock(this.dlcOffers[0].changeSPK.slice(2)),\n      serialId: this.dlcOffers[0].changeSerialId,\n    });\n    outputs.push({\n      value: Value.fromSats(Number(acceptChangeValue)),\n      script: Script.p2wpkhLock(this.dlcAccepts[0].changeSPK.slice(2)),\n      serialId: this.dlcAccepts[0].changeSerialId,\n    });\n\n    outputs.sort((a, b) => Number(a.serialId) - Number(b.serialId));\n\n    outputs.forEach((output) => {\n      tx.addOutput(output.value, output.script);\n    });\n\n    return tx.toTx();\n  }\n\n  private ensureSameFundingInputs(): void {\n    // Check for offers\n    const referenceOfferInputs = this.dlcOffers[0].fundingInputs.map((input) =>\n      input.serialize().toString('hex'),\n    );\n    for (let i = 1; i < this.dlcOffers.length; i++) {\n      const currentInputs = this.dlcOffers[i].fundingInputs.map((input) =>\n        input.serialize().toString('hex'),\n      );\n      if (!this.arraysEqual(referenceOfferInputs, currentInputs)) {\n        throw new Error(\n          `Funding inputs for offer ${i} do not match the first offer's funding inputs.`,\n        );\n      }\n    }\n\n    // Check for accepts\n    const referenceAcceptInputs = this.dlcAccepts[0].fundingInputs.map(\n      (input) => input.serialize().toString('hex'),\n    );\n    for (let i = 1; i < this.dlcAccepts.length; i++) {\n      const currentInputs = this.dlcAccepts[i].fundingInputs.map((input) =>\n        input.serialize().toString('hex'),\n      );\n      if (!this.arraysEqual(referenceAcceptInputs, currentInputs)) {\n        throw new Error(\n          `Funding inputs for accept ${i} do not match the first accept's funding inputs.`,\n        );\n      }\n    }\n  }\n\n  private arraysEqual(arr1: string[], arr2: string[]): boolean {\n    if (arr1.length !== arr2.length) return false;\n    for (let i = 0; i < arr1.length; i++) {\n      if (arr1[i] !== arr2[i]) return false;\n    }\n    return true;\n  }\n}\n\ninterface Output {\n  value: Value;\n  script: Script;\n  serialId: bigint;\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"d997beb99f7935e7f772a75870991671bf5e0804","contentHash":"0bb84aea2a59fdfb027c30b6a3d81789d39ac3515c20bd13535c8f264214fd0c"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/Builder.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/Builder.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":538}},"4":{"start":{"line":7,"column":18},"end":{"line":7,"column":46}},"5":{"start":{"line":8,"column":20},"end":{"line":8,"column":50}},"6":{"start":{"line":9,"column":27},"end":{"line":9,"column":54}},"7":{"start":{"line":10,"column":21},"end":{"line":10,"column":59}},"8":{"start":{"line":11,"column":21},"end":{"line":11,"column":45}},"9":{"start":{"line":12,"column":22},"end":{"line":12,"column":47}},"10":{"start":{"line":13,"column":22},"end":{"line":13,"column":46}},"11":{"start":{"line":14,"column":23},"end":{"line":14,"column":48}},"12":{"start":{"line":15,"column":19},"end":{"line":15,"column":40}},"13":{"start":{"line":16,"column":18},"end":{"line":16,"column":38}},"14":{"start":{"line":17,"column":19},"end":{"line":17,"column":40}},"15":{"start":{"line":18,"column":0},"end":{"line":21,"column":2}},"16":{"start":{"line":38,"column":33},"end":{"line":38,"column":85}},"17":{"start":{"line":38,"column":54},"end":{"line":38,"column":85}},"18":{"start":{"line":39,"column":0},"end":{"line":39,"column":60}},"19":{"start":{"line":56,"column":35},"end":{"line":56,"column":114}},"20":{"start":{"line":56,"column":56},"end":{"line":56,"column":114}},"21":{"start":{"line":57,"column":0},"end":{"line":57,"column":64}},"22":{"start":{"line":58,"column":37},"end":{"line":58,"column":82}},"23":{"start":{"line":58,"column":58},"end":{"line":58,"column":82}},"24":{"start":{"line":59,"column":0},"end":{"line":59,"column":68}},"25":{"start":{"line":67,"column":31},"end":{"line":71,"column":1}},"26":{"start":{"line":68,"column":27},"end":{"line":68,"column":97}},"27":{"start":{"line":69,"column":31},"end":{"line":69,"column":113}},"28":{"start":{"line":70,"column":4},"end":{"line":70,"column":63}},"29":{"start":{"line":72,"column":0},"end":{"line":72,"column":56}},"30":{"start":{"line":79,"column":45},"end":{"line":86,"column":1}},"31":{"start":{"line":80,"column":4},"end":{"line":82,"column":84}},"32":{"start":{"line":82,"column":8},"end":{"line":82,"column":84}},"33":{"start":{"line":83,"column":28},"end":{"line":84,"column":24}},"34":{"start":{"line":85,"column":4},"end":{"line":85,"column":27}},"35":{"start":{"line":87,"column":0},"end":{"line":87,"column":84}},"36":{"start":{"line":100,"column":24},"end":{"line":121,"column":1}},"37":{"start":{"line":101,"column":28},"end":{"line":101,"column":91}},"38":{"start":{"line":102,"column":31},"end":{"line":102,"column":69}},"39":{"start":{"line":103,"column":4},"end":{"line":103,"column":60}},"40":{"start":{"line":104,"column":4},"end":{"line":104,"column":55}},"41":{"start":{"line":105,"column":4},"end":{"line":105,"column":61}},"42":{"start":{"line":106,"column":23},"end":{"line":106,"column":53}},"43":{"start":{"line":107,"column":4},"end":{"line":107,"column":43}},"44":{"start":{"line":108,"column":25},"end":{"line":108,"column":57}},"45":{"start":{"line":109,"column":4},"end":{"line":109,"column":51}},"46":{"start":{"line":110,"column":4},"end":{"line":110,"column":57}},"47":{"start":{"line":111,"column":4},"end":{"line":111,"column":41}},"48":{"start":{"line":112,"column":23},"end":{"line":112,"column":53}},"49":{"start":{"line":113,"column":4},"end":{"line":113,"column":117}},"50":{"start":{"line":114,"column":4},"end":{"line":114,"column":43}},"51":{"start":{"line":115,"column":4},"end":{"line":115,"column":57}},"52":{"start":{"line":116,"column":4},"end":{"line":116,"column":41}},"53":{"start":{"line":117,"column":4},"end":{"line":117,"column":69}},"54":{"start":{"line":118,"column":4},"end":{"line":119,"column":62}},"55":{"start":{"line":120,"column":4},"end":{"line":120,"column":22}},"56":{"start":{"line":122,"column":0},"end":{"line":122,"column":42}},"57":{"start":{"line":137,"column":30},"end":{"line":205,"column":1}},"58":{"start":{"line":138,"column":28},"end":{"line":138,"column":91}},"59":{"start":{"line":141,"column":30},"end":{"line":141,"column":67}},"60":{"start":{"line":142,"column":24},"end":{"line":142,"column":83}},"61":{"start":{"line":143,"column":4},"end":{"line":201,"column":5}},"62":{"start":{"line":144,"column":8},"end":{"line":171,"column":9}},"63":{"start":{"line":145,"column":12},"end":{"line":145,"column":167}},"64":{"start":{"line":146,"column":12},"end":{"line":146,"column":65}},"65":{"start":{"line":147,"column":12},"end":{"line":156,"column":14}},"66":{"start":{"line":159,"column":12},"end":{"line":159,"column":184}},"67":{"start":{"line":160,"column":12},"end":{"line":160,"column":52}},"68":{"start":{"line":161,"column":12},"end":{"line":170,"column":14}},"69":{"start":{"line":174,"column":8},"end":{"line":174,"column":48}},"70":{"start":{"line":175,"column":8},"end":{"line":200,"column":9}},"71":{"start":{"line":176,"column":12},"end":{"line":176,"column":178}},"72":{"start":{"line":177,"column":12},"end":{"line":186,"column":14}},"73":{"start":{"line":189,"column":12},"end":{"line":189,"column":176}},"74":{"start":{"line":190,"column":12},"end":{"line":199,"column":14}},"75":{"start":{"line":202,"column":27},"end":{"line":202,"column":60}},"76":{"start":{"line":203,"column":28},"end":{"line":203,"column":97}},"77":{"start":{"line":204,"column":4},"end":{"line":204,"column":152}},"78":{"start":{"line":206,"column":0},"end":{"line":206,"column":54}},"79":{"start":{"line":219,"column":35},"end":{"line":221,"column":1}},"80":{"start":{"line":220,"column":4},"end":{"line":220,"column":144}},"81":{"start":{"line":222,"column":0},"end":{"line":222,"column":64}},"82":{"start":{"line":236,"column":32},"end":{"line":238,"column":1}},"83":{"start":{"line":237,"column":4},"end":{"line":237,"column":160}},"84":{"start":{"line":239,"column":0},"end":{"line":239,"column":58}},"85":{"start":{"line":253,"column":32},"end":{"line":255,"column":1}},"86":{"start":{"line":254,"column":4},"end":{"line":254,"column":152}},"87":{"start":{"line":256,"column":0},"end":{"line":256,"column":58}},"88":{"start":{"line":270,"column":31},"end":{"line":272,"column":1}},"89":{"start":{"line":271,"column":4},"end":{"line":271,"column":151}},"90":{"start":{"line":273,"column":0},"end":{"line":273,"column":56}},"91":{"start":{"line":290,"column":30},"end":{"line":304,"column":1}},"92":{"start":{"line":291,"column":4},"end":{"line":292,"column":64}},"93":{"start":{"line":292,"column":8},"end":{"line":292,"column":64}},"94":{"start":{"line":293,"column":4},"end":{"line":294,"column":68}},"95":{"start":{"line":294,"column":8},"end":{"line":294,"column":68}},"96":{"start":{"line":295,"column":28},"end":{"line":295,"column":91}},"97":{"start":{"line":296,"column":28},"end":{"line":296,"column":42}},"98":{"start":{"line":297,"column":31},"end":{"line":297,"column":184}},"99":{"start":{"line":298,"column":23},"end":{"line":298,"column":165}},"100":{"start":{"line":299,"column":25},"end":{"line":299,"column":62}},"101":{"start":{"line":300,"column":4},"end":{"line":300,"column":45}},"102":{"start":{"line":301,"column":4},"end":{"line":301,"column":75}},"103":{"start":{"line":302,"column":4},"end":{"line":302,"column":43}},"104":{"start":{"line":303,"column":4},"end":{"line":303,"column":22}},"105":{"start":{"line":305,"column":0},"end":{"line":305,"column":54}},"106":{"start":{"line":334,"column":38},"end":{"line":396,"column":1}},"107":{"start":{"line":336,"column":4},"end":{"line":338,"column":5}},"108":{"start":{"line":337,"column":8},"end":{"line":337,"column":59}},"109":{"start":{"line":339,"column":4},"end":{"line":341,"column":5}},"110":{"start":{"line":340,"column":8},"end":{"line":340,"column":42}},"111":{"start":{"line":342,"column":28},"end":{"line":342,"column":91}},"112":{"start":{"line":343,"column":17},"end":{"line":343,"column":37}},"113":{"start":{"line":344,"column":17},"end":{"line":344,"column":130}},"114":{"start":{"line":345,"column":22},"end":{"line":345,"column":105}},"115":{"start":{"line":346,"column":22},"end":{"line":346,"column":67}},"116":{"start":{"line":349,"column":39},"end":{"line":349,"column":132}},"117":{"start":{"line":350,"column":38},"end":{"line":350,"column":189}},"118":{"start":{"line":351,"column":35},"end":{"line":351,"column":213}},"119":{"start":{"line":352,"column":39},"end":{"line":352,"column":217}},"120":{"start":{"line":353,"column":35},"end":{"line":353,"column":57}},"121":{"start":{"line":354,"column":4},"end":{"line":359,"column":5}},"122":{"start":{"line":355,"column":8},"end":{"line":355,"column":62}},"123":{"start":{"line":358,"column":8},"end":{"line":358,"column":63}},"124":{"start":{"line":360,"column":28},"end":{"line":360,"column":209}},"125":{"start":{"line":361,"column":25},"end":{"line":361,"column":188}},"126":{"start":{"line":362,"column":22},"end":{"line":362,"column":40}},"127":{"start":{"line":363,"column":4},"end":{"line":365,"column":5}},"128":{"start":{"line":364,"column":8},"end":{"line":364,"column":87}},"129":{"start":{"line":366,"column":4},"end":{"line":366,"column":42}},"130":{"start":{"line":367,"column":4},"end":{"line":367,"column":42}},"131":{"start":{"line":368,"column":22},"end":{"line":368,"column":40}},"132":{"start":{"line":369,"column":30},"end":{"line":369,"column":60}},"133":{"start":{"line":370,"column":4},"end":{"line":370,"column":45}},"134":{"start":{"line":371,"column":28},"end":{"line":371,"column":58}},"135":{"start":{"line":372,"column":4},"end":{"line":372,"column":41}},"136":{"start":{"line":373,"column":4},"end":{"line":380,"column":5}},"137":{"start":{"line":374,"column":8},"end":{"line":374,"column":44}},"138":{"start":{"line":375,"column":8},"end":{"line":375,"column":42}},"139":{"start":{"line":377,"column":9},"end":{"line":380,"column":5}},"140":{"start":{"line":378,"column":8},"end":{"line":378,"column":44}},"141":{"start":{"line":379,"column":8},"end":{"line":379,"column":42}},"142":{"start":{"line":381,"column":25},"end":{"line":381,"column":101}},"143":{"start":{"line":382,"column":23},"end":{"line":382,"column":97}},"144":{"start":{"line":383,"column":28},"end":{"line":383,"column":46}},"145":{"start":{"line":384,"column":4},"end":{"line":386,"column":5}},"146":{"start":{"line":385,"column":8},"end":{"line":385,"column":93}},"147":{"start":{"line":387,"column":4},"end":{"line":387,"column":48}},"148":{"start":{"line":388,"column":23},"end":{"line":388,"column":196}},"149":{"start":{"line":389,"column":4},"end":{"line":390,"column":26}},"150":{"start":{"line":391,"column":4},"end":{"line":392,"column":53}},"151":{"start":{"line":393,"column":4},"end":{"line":394,"column":30}},"152":{"start":{"line":394,"column":8},"end":{"line":394,"column":30}},"153":{"start":{"line":395,"column":4},"end":{"line":395,"column":22}},"154":{"start":{"line":397,"column":0},"end":{"line":397,"column":70}},"155":{"start":{"line":398,"column":44},"end":{"line":408,"column":1}},"156":{"start":{"line":399,"column":30},"end":{"line":399,"column":67}},"157":{"start":{"line":400,"column":4},"end":{"line":406,"column":7}},"158":{"start":{"line":401,"column":28},"end":{"line":401,"column":96}},"159":{"start":{"line":402,"column":8},"end":{"line":405,"column":10}},"160":{"start":{"line":407,"column":4},"end":{"line":407,"column":29}},"161":{"start":{"line":409,"column":0},"end":{"line":409,"column":82}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":38,"column":33},"end":{"line":38,"column":34}},"loc":{"start":{"line":38,"column":54},"end":{"line":38,"column":85}},"line":38},"2":{"name":"(anonymous_2)","decl":{"start":{"line":56,"column":35},"end":{"line":56,"column":36}},"loc":{"start":{"line":56,"column":56},"end":{"line":56,"column":114}},"line":56},"3":{"name":"(anonymous_3)","decl":{"start":{"line":58,"column":37},"end":{"line":58,"column":38}},"loc":{"start":{"line":58,"column":58},"end":{"line":58,"column":82}},"line":58},"4":{"name":"(anonymous_4)","decl":{"start":{"line":67,"column":31},"end":{"line":67,"column":32}},"loc":{"start":{"line":67,"column":59},"end":{"line":71,"column":1}},"line":67},"5":{"name":"(anonymous_5)","decl":{"start":{"line":79,"column":45},"end":{"line":79,"column":46}},"loc":{"start":{"line":79,"column":63},"end":{"line":86,"column":1}},"line":79},"6":{"name":"(anonymous_6)","decl":{"start":{"line":100,"column":24},"end":{"line":100,"column":25}},"loc":{"start":{"line":100,"column":132},"end":{"line":121,"column":1}},"line":100},"7":{"name":"(anonymous_7)","decl":{"start":{"line":137,"column":30},"end":{"line":137,"column":31}},"loc":{"start":{"line":137,"column":150},"end":{"line":205,"column":1}},"line":137},"8":{"name":"(anonymous_8)","decl":{"start":{"line":219,"column":35},"end":{"line":219,"column":36}},"loc":{"start":{"line":219,"column":120},"end":{"line":221,"column":1}},"line":219},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":32},"end":{"line":236,"column":33}},"loc":{"start":{"line":236,"column":134},"end":{"line":238,"column":1}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":253,"column":32},"end":{"line":253,"column":33}},"loc":{"start":{"line":253,"column":126},"end":{"line":255,"column":1}},"line":253},"11":{"name":"(anonymous_11)","decl":{"start":{"line":270,"column":31},"end":{"line":270,"column":32}},"loc":{"start":{"line":270,"column":125},"end":{"line":272,"column":1}},"line":270},"12":{"name":"(anonymous_12)","decl":{"start":{"line":290,"column":30},"end":{"line":290,"column":31}},"loc":{"start":{"line":290,"column":215},"end":{"line":304,"column":1}},"line":290},"13":{"name":"(anonymous_13)","decl":{"start":{"line":334,"column":38},"end":{"line":334,"column":39}},"loc":{"start":{"line":335,"column":107},"end":{"line":396,"column":1}},"line":335},"14":{"name":"(anonymous_14)","decl":{"start":{"line":398,"column":44},"end":{"line":398,"column":45}},"loc":{"start":{"line":398,"column":73},"end":{"line":408,"column":1}},"line":398},"15":{"name":"(anonymous_15)","decl":{"start":{"line":400,"column":48},"end":{"line":400,"column":49}},"loc":{"start":{"line":400,"column":62},"end":{"line":406,"column":5}},"line":400}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":68,"column":27},"end":{"line":68,"column":97}},"type":"cond-expr","locations":[{"start":{"line":68,"column":65},"end":{"line":68,"column":78}},{"start":{"line":68,"column":81},"end":{"line":68,"column":97}}],"line":68},"4":{"loc":{"start":{"line":69,"column":31},"end":{"line":69,"column":113}},"type":"cond-expr","locations":[{"start":{"line":69,"column":73},"end":{"line":69,"column":90}},{"start":{"line":69,"column":93},"end":{"line":69,"column":113}}],"line":69},"5":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":84}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":84}},{"start":{"line":80,"column":4},"end":{"line":82,"column":84}}],"line":80},"6":{"loc":{"start":{"line":143,"column":4},"end":{"line":201,"column":5}},"type":"if","locations":[{"start":{"line":143,"column":4},"end":{"line":201,"column":5}},{"start":{"line":143,"column":4},"end":{"line":201,"column":5}}],"line":143},"7":{"loc":{"start":{"line":144,"column":8},"end":{"line":171,"column":9}},"type":"if","locations":[{"start":{"line":144,"column":8},"end":{"line":171,"column":9}},{"start":{"line":144,"column":8},"end":{"line":171,"column":9}}],"line":144},"8":{"loc":{"start":{"line":175,"column":8},"end":{"line":200,"column":9}},"type":"if","locations":[{"start":{"line":175,"column":8},"end":{"line":200,"column":9}},{"start":{"line":175,"column":8},"end":{"line":200,"column":9}}],"line":175},"9":{"loc":{"start":{"line":203,"column":28},"end":{"line":203,"column":97}},"type":"cond-expr","locations":[{"start":{"line":203,"column":52},"end":{"line":203,"column":82}},{"start":{"line":203,"column":85},"end":{"line":203,"column":97}}],"line":203},"10":{"loc":{"start":{"line":290,"column":150},"end":{"line":290,"column":174}},"type":"default-arg","locations":[{"start":{"line":290,"column":165},"end":{"line":290,"column":174}}],"line":290},"11":{"loc":{"start":{"line":290,"column":176},"end":{"line":290,"column":210}},"type":"default-arg","locations":[{"start":{"line":290,"column":183},"end":{"line":290,"column":210}}],"line":290},"12":{"loc":{"start":{"line":291,"column":4},"end":{"line":292,"column":64}},"type":"if","locations":[{"start":{"line":291,"column":4},"end":{"line":292,"column":64}},{"start":{"line":291,"column":4},"end":{"line":292,"column":64}}],"line":291},"13":{"loc":{"start":{"line":293,"column":4},"end":{"line":294,"column":68}},"type":"if","locations":[{"start":{"line":293,"column":4},"end":{"line":294,"column":68}},{"start":{"line":293,"column":4},"end":{"line":294,"column":68}}],"line":293},"14":{"loc":{"start":{"line":301,"column":24},"end":{"line":301,"column":74}},"type":"cond-expr","locations":[{"start":{"line":301,"column":53},"end":{"line":301,"column":62}},{"start":{"line":301,"column":65},"end":{"line":301,"column":74}}],"line":301},"15":{"loc":{"start":{"line":334,"column":145},"end":{"line":334,"column":169}},"type":"default-arg","locations":[{"start":{"line":334,"column":160},"end":{"line":334,"column":169}}],"line":334},"16":{"loc":{"start":{"line":334,"column":171},"end":{"line":334,"column":206}},"type":"default-arg","locations":[{"start":{"line":334,"column":179},"end":{"line":334,"column":206}}],"line":334},"17":{"loc":{"start":{"line":335,"column":0},"end":{"line":335,"column":40}},"type":"default-arg","locations":[{"start":{"line":335,"column":13},"end":{"line":335,"column":40}}],"line":335},"18":{"loc":{"start":{"line":335,"column":42},"end":{"line":335,"column":60}},"type":"default-arg","locations":[{"start":{"line":335,"column":59},"end":{"line":335,"column":60}}],"line":335},"19":{"loc":{"start":{"line":335,"column":62},"end":{"line":335,"column":78}},"type":"default-arg","locations":[{"start":{"line":335,"column":77},"end":{"line":335,"column":78}}],"line":335},"20":{"loc":{"start":{"line":335,"column":80},"end":{"line":335,"column":102}},"type":"default-arg","locations":[{"start":{"line":335,"column":97},"end":{"line":335,"column":102}}],"line":335},"21":{"loc":{"start":{"line":336,"column":4},"end":{"line":338,"column":5}},"type":"if","locations":[{"start":{"line":336,"column":4},"end":{"line":338,"column":5}},{"start":{"line":336,"column":4},"end":{"line":338,"column":5}}],"line":336},"22":{"loc":{"start":{"line":339,"column":4},"end":{"line":341,"column":5}},"type":"if","locations":[{"start":{"line":339,"column":4},"end":{"line":341,"column":5}},{"start":{"line":339,"column":4},"end":{"line":341,"column":5}}],"line":339},"23":{"loc":{"start":{"line":354,"column":4},"end":{"line":359,"column":5}},"type":"if","locations":[{"start":{"line":354,"column":4},"end":{"line":359,"column":5}},{"start":{"line":354,"column":4},"end":{"line":359,"column":5}}],"line":354},"24":{"loc":{"start":{"line":363,"column":4},"end":{"line":365,"column":5}},"type":"if","locations":[{"start":{"line":363,"column":4},"end":{"line":365,"column":5}},{"start":{"line":363,"column":4},"end":{"line":365,"column":5}}],"line":363},"25":{"loc":{"start":{"line":373,"column":4},"end":{"line":380,"column":5}},"type":"if","locations":[{"start":{"line":373,"column":4},"end":{"line":380,"column":5}},{"start":{"line":373,"column":4},"end":{"line":380,"column":5}}],"line":373},"26":{"loc":{"start":{"line":377,"column":9},"end":{"line":380,"column":5}},"type":"if","locations":[{"start":{"line":377,"column":9},"end":{"line":380,"column":5}},{"start":{"line":377,"column":9},"end":{"line":380,"column":5}}],"line":377},"27":{"loc":{"start":{"line":384,"column":4},"end":{"line":386,"column":5}},"type":"if","locations":[{"start":{"line":384,"column":4},"end":{"line":386,"column":5}},{"start":{"line":384,"column":4},"end":{"line":386,"column":5}}],"line":384},"28":{"loc":{"start":{"line":393,"column":4},"end":{"line":394,"column":30}},"type":"if","locations":[{"start":{"line":393,"column":4},"end":{"line":394,"column":30}},{"start":{"line":393,"column":4},"end":{"line":394,"column":30}}],"line":393}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":248,"18":1,"19":1,"20":422,"21":1,"22":1,"23":3,"24":1,"25":1,"26":317,"27":317,"28":317,"29":1,"30":1,"31":259,"32":0,"33":259,"34":259,"35":1,"36":1,"37":88,"38":88,"39":88,"40":88,"41":88,"42":88,"43":88,"44":88,"45":88,"46":88,"47":88,"48":88,"49":88,"50":88,"51":88,"52":88,"53":88,"54":88,"55":88,"56":1,"57":1,"58":5,"59":5,"60":5,"61":5,"62":3,"63":1,"64":1,"65":1,"66":2,"67":2,"68":2,"69":2,"70":2,"71":1,"72":1,"73":1,"74":1,"75":5,"76":5,"77":5,"78":1,"79":1,"80":1,"81":1,"82":1,"83":2,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":83,"93":0,"94":83,"95":0,"96":83,"97":83,"98":83,"99":83,"100":83,"101":83,"102":83,"103":83,"104":83,"105":1,"106":1,"107":84,"108":1,"109":83,"110":75,"111":83,"112":83,"113":83,"114":83,"115":83,"116":83,"117":83,"118":83,"119":83,"120":83,"121":83,"122":5,"123":78,"124":83,"125":83,"126":83,"127":83,"128":0,"129":83,"130":83,"131":83,"132":83,"133":83,"134":83,"135":83,"136":83,"137":7,"138":7,"139":76,"140":67,"141":67,"142":83,"143":83,"144":83,"145":83,"146":0,"147":83,"148":83,"149":83,"150":83,"151":83,"152":82,"153":83,"154":1,"155":1,"156":77,"157":77,"158":308,"159":308,"160":77,"161":1},"f":{"0":1,"1":248,"2":422,"3":3,"4":317,"5":259,"6":88,"7":5,"8":1,"9":2,"10":1,"11":1,"12":83,"13":84,"14":77,"15":308},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1],"3":[308,9],"4":[313,4],"5":[0,259],"6":[3,2],"7":[1,2],"8":[1,1],"9":[3,2],"10":[0],"11":[0],"12":[0,83],"13":[0,83],"14":[9,74],"15":[7],"16":[7],"17":[76],"18":[76],"19":[76],"20":[75],"21":[1,83],"22":[75,8],"23":[5,78],"24":[0,83],"25":[7,76],"26":[67,9],"27":[0,83],"28":[82,1]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/Builder.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/Builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Value } from '@node-dlc/bitcoin';\nimport {\n  ContractDescriptorV1,\n  ContractInfoV0,\n  DigitDecompositionEventDescriptorV0,\n  MessageType,\n  OracleAnnouncementV0,\n  OracleInfoV0,\n  OrderOfferV0,\n  OrderPositionInfoV0,\n  PayoutFunctionV0,\n  RoundingIntervalsV0,\n} from '@node-dlc/messaging';\nimport {\n  BitcoinNetwork,\n  BitcoinNetworks,\n  chainHashFromNetwork,\n} from 'bitcoin-networks';\nimport Decimal from 'decimal.js';\n\nimport { dustThreshold } from '../CoinSelect';\nimport { getFinalizerByCount } from '../TxFinalizer';\nimport { CoveredCall } from './CoveredCall';\nimport { LinearPayout } from './LinearPayout';\nimport { LongCall } from './LongCall';\nimport { LongPut } from './LongPut';\nimport { ShortPut } from './ShortPut';\n\nexport const UNIT_MULTIPLIER = {\n  bits: BigInt(1e2),\n  sats: BigInt(1),\n};\n\n/**\n * Round a number to the nearest multiple of a given multiplier.\n *\n * @param num - The number to be rounded.\n * @param multiplier - The multiplier to round to.\n * @returns The number rounded to the nearest multiple of the multiplier.\n *\n * @example\n * ```typescript\n * // Example: rounding to nearest 100\n * const number = BigInt(354);\n * const multiplier = BigInt(100);\n * const roundedNumber = roundToNearestMultiplier(number, multiplier);\n * console.log(roundedNumber); // Output: 300\n * ```\n */\nexport const roundToNearestMultiplier = (\n  num: bigint,\n  multiplier: bigint,\n): bigint => (num / multiplier) * multiplier;\n\n/**\n * Round a number up to the nearest multiple of a given multiplier.\n *\n * @param num - The number to be rounded.\n * @param multiplier - The multiplier to round to.\n * @returns The number rounded up to the nearest multiple of the multiplier.\n *\n * @example\n * ```typescript\n * // Example: rounding up to nearest 100\n * const number = BigInt(354);\n * const multiplier = BigInt(100);\n * const roundedNumber = roundToNearestMultiplier(number, multiplier);\n * console.log(roundedNumber); // Output: 400\n * ```\n */\nexport const roundUpToNearestMultiplier = (\n  num: bigint,\n  multiplier: bigint,\n): bigint => ((num + multiplier - BigInt(1)) / multiplier) * multiplier;\n\nexport const roundDownToNearestMultiplier = (\n  num: bigint,\n  multiplier: bigint,\n): bigint => num - (num % multiplier);\n\nexport type DlcParty = 'offeror' | 'acceptor' | 'neither';\n\n/**\n * Compute rounding intervals for a linear or hyperbola payout curve\n *\n * @param {number | bigint | Value} rounding rounding interval in sats\n * @param {number | bigint | Value} contractSize contract size in sats\n * @returns rounding mod for contract size\n */\nexport const computeRoundingModulus = (\n  rounding: number | bigint | Value,\n  contractSize: number | bigint | Value,\n): bigint => {\n  const roundingInSats =\n    rounding instanceof Value ? rounding.sats : BigInt(rounding);\n\n  const contractSizeInSats =\n    contractSize instanceof Value ? contractSize.sats : BigInt(contractSize);\n\n  return (roundingInSats * contractSizeInSats) / BigInt(1e8);\n};\n\n/**\n * Get digit decomposition event descriptor from oracle announcement\n *\n * @param {OracleAnnouncementV0} announcement oracle announcement\n * @returns {DigitDecompositionEventDescriptorV0} event descriptor\n */\nexport const getDigitDecompositionEventDescriptor = (\n  announcement: OracleAnnouncementV0,\n): DigitDecompositionEventDescriptorV0 => {\n  if (\n    announcement.oracleEvent.eventDescriptor.type !==\n    MessageType.DigitDecompositionEventDescriptorV0\n  )\n    throw Error('Only DigitDecompositionEventDescriptorV0 currently supported');\n\n  const eventDescriptor = announcement.oracleEvent\n    .eventDescriptor as DigitDecompositionEventDescriptorV0;\n\n  return eventDescriptor;\n};\n\n/**\n * Build an orderoffer for ContractDescriptorV1\n *\n * @param {OracleAnnouncementV0} announcement oracle announcement\n * @param {bigint} totalCollateral total collateral in satoshis\n * @param {bigint} offerCollateral offer collateral in satoshis\n * @param {PayoutFunctionV0} payoutFunction\n * @param {RoundingIntervalsV0} roundingIntervals\n * @param {bigint} feePerByte sats/vbyte\n * @param {NetworkName} network\n * @returns {OrderOfferV0} Returns order offer\n */\nexport const buildOrderOffer = (\n  announcement: OracleAnnouncementV0,\n  totalCollateral: bigint,\n  offerCollateral: bigint,\n  payoutFunction: PayoutFunctionV0,\n  roundingIntervals: RoundingIntervalsV0,\n  feePerByte: bigint,\n  network: string,\n): OrderOfferV0 => {\n  const eventDescriptor = getDigitDecompositionEventDescriptor(announcement);\n\n  const contractDescriptor = new ContractDescriptorV1();\n  contractDescriptor.numDigits = eventDescriptor.nbDigits;\n  contractDescriptor.payoutFunction = payoutFunction;\n  contractDescriptor.roundingIntervals = roundingIntervals;\n\n  const oracleInfo = new OracleInfoV0();\n  oracleInfo.announcement = announcement;\n\n  const contractInfo = new ContractInfoV0();\n  contractInfo.totalCollateral = totalCollateral;\n  contractInfo.contractDescriptor = contractDescriptor;\n  contractInfo.oracleInfo = oracleInfo;\n\n  const orderOffer = new OrderOfferV0();\n\n  orderOffer.chainHash = chainHashFromNetwork(BitcoinNetworks[network]);\n  orderOffer.contractInfo = contractInfo;\n  orderOffer.offerCollateralSatoshis = offerCollateral;\n  orderOffer.feeRatePerVb = feePerByte;\n  orderOffer.cetLocktime = Math.floor(new Date().getTime() / 1000); // set to current time\n  orderOffer.refundLocktime =\n    announcement.oracleEvent.eventMaturityEpoch + 2419200; // 4 weeks after maturity\n\n  return orderOffer;\n};\n\n/**\n * Builds an order offer for a covered call or short put\n *\n * @param {OracleAnnouncementV0} announcement oracle announcement\n * @param {number} contractSize contract size in satoshis\n * @param {number} strikePrice strike price of contract\n * @param {number} premium premium of contract in satoshis\n * @param {number | bigint} feePerByte sats/vbyte\n * @param {number} rounding rounding interval\n * @param {string} network bitcoin network type\n * @param {string} type call or put\n * @param {number} _totalCollateral total collateral in satoshis (applicable only for short put)\n * @returns {OrderOfferV0} Returns order offer\n */\nexport const buildOptionOrderOffer = (\n  announcement: OracleAnnouncementV0,\n  contractSize: Value,\n  strikePrice: number,\n  premium: Value,\n  feePerByte: number | bigint,\n  rounding: number,\n  network: string,\n  type: 'call' | 'put',\n  direction: 'long' | 'short',\n  _totalCollateral?: Value,\n): OrderOfferV0 => {\n  const eventDescriptor = getDigitDecompositionEventDescriptor(announcement);\n\n  let totalCollateral: bigint;\n  let payoutFunctionInfo: {\n    payoutFunction: PayoutFunctionV0;\n    totalCollateral?: bigint;\n  };\n\n  const roundingIntervals = new RoundingIntervalsV0();\n  const roundingMod = computeRoundingModulus(rounding, contractSize);\n\n  if (direction === 'short') {\n    if (type === 'call') {\n      payoutFunctionInfo = CoveredCall.buildPayoutFunction(\n        BigInt(strikePrice),\n        contractSize.sats,\n        eventDescriptor.base,\n        eventDescriptor.nbDigits,\n      );\n\n      totalCollateral = payoutFunctionInfo.totalCollateral;\n      roundingIntervals.intervals = [\n        {\n          beginInterval: BigInt(0),\n          roundingMod: BigInt(1),\n        },\n        {\n          beginInterval: BigInt(strikePrice),\n          roundingMod,\n        },\n      ];\n    } else {\n      payoutFunctionInfo = ShortPut.buildPayoutFunction(\n        BigInt(strikePrice),\n        contractSize.sats,\n        _totalCollateral.sats,\n        eventDescriptor.base,\n        eventDescriptor.nbDigits,\n      );\n      totalCollateral = _totalCollateral.sats;\n      roundingIntervals.intervals = [\n        {\n          beginInterval: BigInt(0),\n          roundingMod,\n        },\n        {\n          beginInterval: BigInt(strikePrice),\n          roundingMod: BigInt(1),\n        },\n      ];\n    }\n  } else {\n    totalCollateral = _totalCollateral.sats;\n\n    if (type === 'call') {\n      payoutFunctionInfo = LongCall.buildPayoutFunction(\n        BigInt(strikePrice),\n        contractSize.sats,\n        totalCollateral,\n        eventDescriptor.base,\n        eventDescriptor.nbDigits,\n      );\n\n      roundingIntervals.intervals = [\n        {\n          beginInterval: BigInt(0),\n          roundingMod: BigInt(1),\n        },\n        {\n          beginInterval: BigInt(strikePrice),\n          roundingMod,\n        },\n      ];\n    } else {\n      payoutFunctionInfo = LongPut.buildPayoutFunction(\n        BigInt(strikePrice),\n        contractSize.sats,\n        totalCollateral,\n        eventDescriptor.base,\n        eventDescriptor.nbDigits,\n      );\n\n      roundingIntervals.intervals = [\n        {\n          beginInterval: BigInt(0),\n          roundingMod,\n        },\n        {\n          beginInterval: BigInt(strikePrice),\n          roundingMod: BigInt(1),\n        },\n      ];\n    }\n  }\n\n  const payoutFunction = payoutFunctionInfo.payoutFunction;\n\n  const offerCollateral =\n    direction === 'short' ? totalCollateral - premium.sats : premium.sats;\n\n  return buildOrderOffer(\n    announcement,\n    totalCollateral,\n    offerCollateral,\n    payoutFunction,\n    roundingIntervals,\n    BigInt(feePerByte),\n    network,\n  );\n};\n\n/**\n * Builds an order offer for a covered call\n *\n * @param {OracleAnnouncementV0} announcement oracle announcement\n * @param {number} contractSize contract size in satoshis\n * @param {number} strikePrice strike price of contract\n * @param {number} premium premium of contract in satoshis\n * @param {number} feePerByte sats/vbyte\n * @param {number} rounding rounding interval\n * @param {string} network bitcoin network type\n * @returns {OrderOfferV0} Returns order offer\n */\nexport const buildCoveredCallOrderOffer = (\n  announcement: OracleAnnouncementV0,\n  contractSize: Value,\n  strikePrice: number,\n  premium: Value,\n  feePerByte: number,\n  rounding: number,\n  network: string,\n): OrderOfferV0 => {\n  return buildOptionOrderOffer(\n    announcement,\n    contractSize,\n    strikePrice,\n    premium,\n    feePerByte,\n    rounding,\n    network,\n    'call',\n    'short',\n  );\n};\n\n/**\n * Builds an order offer for a short put\n *\n * @param {OracleAnnouncementV0} announcement oracle announcement\n * @param {number} contractSize contract size in satoshis\n * @param {number} strikePrice strike price of contract\n * @param {number} totalCollateral total collateral in satoshis\n * @param {number} premium premium of contract in satoshis\n * @param {number} feePerByte sats/vbyte\n * @param {number} rounding rounding interval\n * @param {string} network bitcoin network type\n * @returns {OrderOfferV0} Returns order offer\n */\nexport const buildShortPutOrderOffer = (\n  announcement: OracleAnnouncementV0,\n  contractSize: Value,\n  strikePrice: number,\n  totalCollateral: Value,\n  premium: Value,\n  feePerByte: number,\n  rounding: number,\n  network: string,\n): OrderOfferV0 => {\n  return buildOptionOrderOffer(\n    announcement,\n    contractSize,\n    strikePrice,\n    premium,\n    feePerByte,\n    rounding,\n    network,\n    'put',\n    'short',\n    totalCollateral,\n  );\n};\n\n/**\n * Builds an order offer for a long call\n *\n * @param {OracleAnnouncementV0} announcement oracle announcement\n * @param {number} contractSize contract size in satoshis\n * @param {number} strikePrice strike price of contract\n * @param {number} maxGain maximum amount that can be gained (totalCollateral)\n * @param {number} premium premium of contract in satoshis\n * @param {number} feePerByte sats/vbyte\n * @param {number} rounding rounding interval\n * @param {string} network bitcoin network type\n * @returns {OrderOfferV0} Returns order offer\n */\nexport const buildLongCallOrderOffer = (\n  announcement: OracleAnnouncementV0,\n  contractSize: Value,\n  strikePrice: number,\n  maxGain: Value,\n  premium: Value,\n  feePerByte: number,\n  rounding: number,\n  network: string,\n): OrderOfferV0 => {\n  return buildOptionOrderOffer(\n    announcement,\n    contractSize,\n    strikePrice,\n    premium,\n    feePerByte,\n    rounding,\n    network,\n    'call',\n    'long',\n    maxGain,\n  );\n};\n\n/**\n * Builds an order offer for a long put\n *\n * @param {OracleAnnouncementV0} announcement oracle announcement\n * @param {number} contractSize contract size in satoshis\n * @param {number} strikePrice strike price of contract\n * @param {number} maxGain maximum amount that can be gained (totalCollateral)\n * @param {number} premium premium of contract in satoshis\n * @param {number} feePerByte sats/vbyte\n * @param {number} rounding rounding interval\n * @param {string} network bitcoin network type\n * @returns {OrderOfferV0} Returns order offer\n */\nexport const buildLongPutOrderOffer = (\n  announcement: OracleAnnouncementV0,\n  contractSize: Value,\n  strikePrice: number,\n  maxGain: Value,\n  premium: Value,\n  feePerByte: number,\n  rounding: number,\n  network: string,\n): OrderOfferV0 => {\n  return buildOptionOrderOffer(\n    announcement,\n    contractSize,\n    strikePrice,\n    premium,\n    feePerByte,\n    rounding,\n    network,\n    'put',\n    'long',\n    maxGain,\n  );\n};\n\n/**\n * Builds an order offer for a linear curve\n *\n * @param {OracleAnnouncementV0} announcement oracle announcement\n * @param {Value} offerCollateral offer collateral amount\n * @param {Value} minPayout minimum payout\n * @param {Value} maxPayout maximum payout (also total collateral)\n * @param {bigint} startOutcome oracle outcome (in bits or sats)\n * @param {bigint} endOutcome oracle outcome (in bits or sats)\n * @param {bigint} feePerByte sats/vbyte\n * @param {Value} rounding rounding mod for RoundingInterval\n * @param {BitcoinNetwork} network bitcoin, bitcoin_testnet or bitcoin_regtest\n * @param {DlcParty} [shiftForFees] shift for offerer, acceptor or neither (who should pay fees)\n * @param {Value} [fees] fees to shift\n * @returns {OrderOfferV0}\n */\nexport const buildLinearOrderOffer = (\n  announcement: OracleAnnouncementV0,\n  offerCollateral: Value,\n  minPayout: Value,\n  maxPayout: Value,\n  startOutcome: bigint,\n  endOutcome: bigint,\n  feePerByte: bigint,\n  roundingIntervals: RoundingIntervalsV0,\n  network: BitcoinNetwork,\n  shiftForFees: DlcParty = 'neither',\n  fees: Value = Value.fromSats(0),\n): OrderOfferV0 => {\n  if (maxPayout.lt(minPayout))\n    throw Error('maxPayout must be greater than minPayout');\n  if (endOutcome < startOutcome)\n    throw Error('endOutcome must be greater than startOutcome');\n\n  const eventDescriptor = getDigitDecompositionEventDescriptor(announcement);\n\n  const totalCollateral = maxPayout.sats;\n\n  const { payoutFunction } = LinearPayout.buildPayoutFunction(\n    minPayout.sats,\n    maxPayout.sats,\n    startOutcome,\n    endOutcome,\n    eventDescriptor.base,\n    eventDescriptor.nbDigits,\n  );\n\n  const orderOffer = buildOrderOffer(\n    announcement,\n    totalCollateral,\n    offerCollateral.sats,\n    payoutFunction,\n    roundingIntervals,\n    feePerByte,\n    network.name,\n  );\n\n  const positionInfo = new OrderPositionInfoV0();\n  positionInfo.shiftForFees = shiftForFees;\n  positionInfo.fees = shiftForFees === 'neither' ? BigInt(0) : fees.sats;\n  orderOffer.positionInfo = positionInfo;\n\n  return orderOffer;\n};\n\n/**\n * Builds a custom strategy order offer\n *\n * Calculates offer fees\n * calculates the minimum max gain\n * maxLoss and maxGain are normalized to 1 BTC contracts\n *\n * shiftForFees 'offeror' means 'offeror' pays network fees\n * shiftForFees 'acceptor' means 'acceptor' pays network fees\n *\n * numContracts refers to the number of DLCs in the funding transaction\n * if it's not a batch dlc funding transaction, then this is not relevant\n *\n * @param {OracleAnnouncementV0} announcement oracle announcement\n * @param {Value} contractSize contract size\n * @param {Value} normalizedMaxLoss maximum amount that can be lost based on 1 BTC contract\n * @param {Value} normalizedMaxGain maximum amount that can be gained based on 1 BTC contract\n * @param {bigint} feePerByte sats/vbyte\n * @param {Value} roundingIntervals rounding mod for RoundingInterval\n * @param {BitcoinNetwork} network bitcoin, bitcoin_testnet or bitcoin_regtest\n * @param {DlcParty} [shiftForFees] shift for offerer, acceptor or neither\n * @param {Value} [fees_] fees to shift\n * @param {Value} [collateral] collateral to use\n * @param {number} [numOfferInputs] number of inputs to use\n * @param {number} [numContracts] number of DLCs in the funding transaction\n *\n * @returns {OrderOfferV0}\n */\nexport const buildCustomStrategyOrderOffer = (\n  announcement: OracleAnnouncementV0,\n  contractSize: Value,\n  normalizedMaxLoss: Value,\n  normalizedMaxGain: Value,\n  feePerByte: bigint,\n  roundingIntervals: RoundingIntervalsV0,\n  network: BitcoinNetwork,\n  shiftForFees: DlcParty = 'neither',\n  fees_: Value = Value.fromSats(0), // NOTE: fees should be divided before doing batch transaction\n  collateral: Value = Value.fromSats(0),\n  numOfferInputs = 1,\n  numContracts = 1,\n  skipValidation = false,\n): OrderOfferV0 => {\n  if (contractSize.eq(Value.zero())) {\n    throw Error('contractSize must be greater than 0');\n  }\n\n  if (collateral.eq(Value.zero())) {\n    collateral = contractSize.clone();\n  }\n\n  const eventDescriptor = getDigitDecompositionEventDescriptor(announcement);\n\n  const unit = eventDescriptor.unit;\n\n  const fees = Value.fromSats(\n    Number(new Decimal(Number(fees_.sats)).dividedBy(numContracts).toFixed(0)),\n  );\n\n  const finalizer = getFinalizerByCount(\n    feePerByte,\n    numOfferInputs,\n    1,\n    numContracts,\n  );\n  const offerFees = Value.fromSats(finalizer.offerFees);\n\n  // Use offerFees + dustThreshold for min max gain, to ensure in the case of\n  // 0 PnL the acceptor payout is not dust\n  const minMaxGainForContractSize_ = offerFees.addn(\n    Value.fromSats(dustThreshold(BigInt(feePerByte))),\n  );\n  const minMaxGainForContractSize = Value.fromSats(\n    roundUpToNearestMultiplier(\n      minMaxGainForContractSize_.sats,\n      BigInt(UNIT_MULTIPLIER[unit.toLowerCase()]),\n    ),\n  );\n\n  const maxLossForContractSize = Value.fromSats(\n    roundUpToNearestMultiplier(\n      (normalizedMaxLoss.sats * contractSize.sats) / BigInt(1e8),\n      BigInt(UNIT_MULTIPLIER[unit.toLowerCase()]),\n    ),\n  );\n  const tempMaxGainForContractSize = Value.fromSats(\n    roundUpToNearestMultiplier(\n      (normalizedMaxGain.sats * contractSize.sats) / BigInt(1e8),\n      BigInt(UNIT_MULTIPLIER[unit.toLowerCase()]),\n    ),\n  );\n\n  const maxGainForContractSize = Value.zero();\n\n  if (tempMaxGainForContractSize.lt(minMaxGainForContractSize)) {\n    maxGainForContractSize.add(minMaxGainForContractSize);\n  } else {\n    maxGainForContractSize.add(tempMaxGainForContractSize);\n  }\n\n  const maxGainAdjusted = Value.fromSats(\n    roundToNearestMultiplier(\n      (maxGainForContractSize.sats * BigInt(1e8)) / contractSize.sats,\n      BigInt(UNIT_MULTIPLIER[unit.toLowerCase()]),\n    ),\n  );\n\n  const feesAdjusted = Value.fromSats(\n    roundToNearestMultiplier(\n      (fees.sats * BigInt(1e8)) / contractSize.sats,\n      BigInt(UNIT_MULTIPLIER[unit.toLowerCase()]),\n    ),\n  );\n\n  const minPayout = collateral.clone();\n  if (minPayout.lt(maxLossForContractSize.addn(maxGainForContractSize))) {\n    throw new Error(\n      'Subtraction would result in a negative value for minPayout.',\n    );\n  }\n  minPayout.sub(maxLossForContractSize);\n  minPayout.sub(maxGainForContractSize);\n  const maxPayout = collateral.clone();\n\n  const startOutcomeValue = Value.fromBitcoin(1);\n  startOutcomeValue.sub(normalizedMaxLoss);\n  const endOutcomeValue = Value.fromBitcoin(1);\n  endOutcomeValue.add(maxGainAdjusted);\n\n  if (shiftForFees === 'offeror') {\n    startOutcomeValue.add(feesAdjusted);\n    endOutcomeValue.add(feesAdjusted);\n  } else if (shiftForFees === 'acceptor') {\n    startOutcomeValue.sub(feesAdjusted);\n    endOutcomeValue.sub(feesAdjusted);\n  }\n\n  const startOutcome =\n    startOutcomeValue.sats / BigInt(UNIT_MULTIPLIER[unit.toLowerCase()]);\n  const endOutcome =\n    endOutcomeValue.sats / BigInt(UNIT_MULTIPLIER[unit.toLowerCase()]);\n\n  const offerCollateral = collateral.clone();\n  if (offerCollateral.lt(maxGainForContractSize)) {\n    throw new Error(\n      'Subtraction would result in a negative value for offerCollateral.',\n    );\n  }\n  offerCollateral.sub(maxGainForContractSize);\n\n  const orderOffer = buildLinearOrderOffer(\n    announcement,\n    offerCollateral,\n    minPayout,\n    maxPayout,\n    startOutcome,\n    endOutcome,\n    feePerByte,\n    roundingIntervals,\n    network,\n    shiftForFees,\n    fees,\n  );\n\n  (orderOffer.positionInfo as OrderPositionInfoV0).contractSize =\n    contractSize.sats;\n\n  (orderOffer.positionInfo as OrderPositionInfoV0).instrumentName = ((orderOffer.contractInfo as ContractInfoV0)\n    .oracleInfo as OracleInfoV0).announcement.oracleEvent.eventId;\n\n  if (!skipValidation) orderOffer.validate();\n\n  return orderOffer;\n};\n\ninterface IInterval {\n  beginInterval: bigint;\n  rounding: number | bigint | Value;\n}\n\nexport const buildRoundingIntervalsFromIntervals = (\n  contractSize: Value,\n  intervals: IInterval[],\n): RoundingIntervalsV0 => {\n  const roundingIntervals = new RoundingIntervalsV0();\n\n  roundingIntervals.intervals = intervals.map((interval) => {\n    const roundingMod = computeRoundingModulus(interval.rounding, contractSize);\n\n    return {\n      beginInterval: interval.beginInterval,\n      roundingMod,\n    };\n  });\n\n  return roundingIntervals;\n};\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"8856c3bd81a337fc1dbc603779ad5d0e5a2fdd3d","contentHash":"130f206c8a9cd6d8ce8586d8e923f8086b7e6923ffd23a50e3f5ad6f6debe226"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LinearPayout.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LinearPayout.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":30}},"4":{"start":{"line":7,"column":20},"end":{"line":7,"column":50}},"5":{"start":{"line":8,"column":23},"end":{"line":8,"column":63}},"6":{"start":{"line":9,"column":32},"end":{"line":9,"column":67}},"7":{"start":{"line":10,"column":28},"end":{"line":65,"column":1}},"8":{"start":{"line":12,"column":23},"end":{"line":12,"column":109}},"9":{"start":{"line":14,"column":31},"end":{"line":20,"column":6}},"10":{"start":{"line":22,"column":24},"end":{"line":31,"column":6}},"11":{"start":{"line":33,"column":31},"end":{"line":39,"column":6}},"12":{"start":{"line":40,"column":27},"end":{"line":40,"column":61}},"13":{"start":{"line":41,"column":4},"end":{"line":41,"column":41}},"14":{"start":{"line":42,"column":4},"end":{"line":42,"column":47}},"15":{"start":{"line":43,"column":4},"end":{"line":43,"column":39}},"16":{"start":{"line":44,"column":4},"end":{"line":49,"column":7}},"17":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"18":{"start":{"line":56,"column":4},"end":{"line":61,"column":7}},"19":{"start":{"line":62,"column":4},"end":{"line":64,"column":6}},"20":{"start":{"line":66,"column":0},"end":{"line":66,"column":47}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":28},"end":{"line":10,"column":29}},"loc":{"start":{"line":10,"column":106},"end":{"line":65,"column":1}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":90,"9":90,"10":90,"11":90,"12":90,"13":90,"14":90,"15":90,"16":90,"17":90,"18":90,"19":90,"20":1},"f":{"0":1,"1":90},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LinearPayout.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LinearPayout.ts"],"names":[],"mappings":";;;;;;AAAA,mDAAuD;AACvD,gEAA8B;AAE9B,oEAAiE;AAEjE,MAAM,mBAAmB,GAAG,CAC1B,SAAiB,EACjB,SAAiB,EACjB,YAAoB,EACpB,UAAkB,EAClB,UAAkB,EAClB,YAAoB,EACkB,EAAE;IACxC,oCAAoC;IACpC,MAAM,UAAU,GAAG,MAAM,CACvB,IAAI,sBAAE,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC3D,CAAC;IAEF,gBAAgB;IAChB,MAAM,kBAAkB,GAAG,IAAI,6CAAqB,CAAC;QACnD,EAAE,OAAO,EAAE,IAAI,sBAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE;QACzD;YACE,OAAO,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACrC,MAAM,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAClC;KACF,CAAC,CAAC;IAEH,cAAc;IACd,MAAM,WAAW,GAAG,IAAI,6CAAqB,CAAC;QAC5C;YACE,OAAO,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACrC,MAAM,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAClC;QACD;YACE,OAAO,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAClC;KACF,CAAC,CAAC;IAEH,gBAAgB;IAChB,MAAM,kBAAkB,GAAG,IAAI,6CAAqB,CAAC;QACnD,EAAE,OAAO,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE;QAC1E;YACE,OAAO,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,EAAE,IAAI,sBAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAClC;KACF,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAI,4BAAgB,EAAE,CAAC;IAC9C,cAAc,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrC,cAAc,CAAC,eAAe,GAAG,SAAS,CAAC;IAC3C,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;IAEnC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,gBAAgB,EAAE,kBAAkB,CAAC,kBAAkB,EAAE;QACzD,QAAQ,EAAE,YAAY;QACtB,cAAc,EAAE,SAAS;QACzB,cAAc,EAAE,CAAC;KAClB,CAAC,CAAC;IAEH,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,gBAAgB,EAAE,WAAW,CAAC,kBAAkB,EAAE;QAClD,QAAQ,EAAE,UAAU;QACpB,cAAc,EAAE,SAAS;QACzB,cAAc,EAAE,CAAC;KAClB,CAAC,CAAC;IAEH,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,gBAAgB,EAAE,kBAAkB,CAAC,kBAAkB,EAAE;QACzD,QAAQ,EAAE,UAAU;QACpB,cAAc,EAAE,SAAS;QACzB,cAAc,EAAE,CAAC;KAClB,CAAC,CAAC;IAEH,OAAO;QACL,cAAc;KACf,CAAC;AACJ,CAAC,CAAC;AAEW,QAAA,YAAY,GAAG,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { PayoutFunctionV0 } from '@node-dlc/messaging';\nimport BN from 'bignumber.js';\n\nimport { PolynomialPayoutCurve } from '../PolynomialPayoutCurve';\n\nconst buildPayoutFunction = (\n  minPayout: bigint,\n  maxPayout: bigint,\n  startOutcome: bigint,\n  endOutcome: bigint,\n  oracleBase: number,\n  oracleDigits: number,\n): { payoutFunction: PayoutFunctionV0 } => {\n  // Max outcome limited by the oracle\n  const maxOutcome = BigInt(\n    new BN(oracleBase).pow(oracleDigits).minus(1).toString(10),\n  );\n\n  // max loss line\n  const payoutCurveMaxLoss = new PolynomialPayoutCurve([\n    { outcome: new BN(0), payout: new BN(Number(minPayout)) },\n    {\n      outcome: new BN(Number(startOutcome)),\n      payout: new BN(Number(minPayout)),\n    },\n  ]);\n\n  // payout line\n  const payoutCurve = new PolynomialPayoutCurve([\n    {\n      outcome: new BN(Number(startOutcome)),\n      payout: new BN(Number(minPayout)),\n    },\n    {\n      outcome: new BN(Number(endOutcome)),\n      payout: new BN(Number(maxPayout)),\n    },\n  ]);\n\n  // max gain line\n  const payoutCurveMaxGain = new PolynomialPayoutCurve([\n    { outcome: new BN(Number(endOutcome)), payout: new BN(Number(maxPayout)) },\n    {\n      outcome: new BN(Number(maxOutcome)),\n      payout: new BN(Number(maxPayout)),\n    },\n  ]);\n\n  const payoutFunction = new PayoutFunctionV0();\n  payoutFunction.endpoint0 = BigInt(0);\n  payoutFunction.endpointPayout0 = minPayout;\n  payoutFunction.extraPrecision0 = 0;\n\n  payoutFunction.pieces.push({\n    payoutCurvePiece: payoutCurveMaxLoss.toPayoutCurvePiece(),\n    endpoint: startOutcome,\n    endpointPayout: minPayout,\n    extraPrecision: 0,\n  });\n\n  payoutFunction.pieces.push({\n    payoutCurvePiece: payoutCurve.toPayoutCurvePiece(),\n    endpoint: endOutcome,\n    endpointPayout: maxPayout,\n    extraPrecision: 0,\n  });\n\n  payoutFunction.pieces.push({\n    payoutCurvePiece: payoutCurveMaxGain.toPayoutCurvePiece(),\n    endpoint: maxOutcome,\n    endpointPayout: maxPayout,\n    extraPrecision: 0,\n  });\n\n  return {\n    payoutFunction,\n  };\n};\n\nexport const LinearPayout = { buildPayoutFunction };\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"fba6f72f7d97e48c0681b4e8b9a7529588bc0b72","contentHash":"03280eb94d07a8b9e9f62d03e42cbc1bbaf7ae64b1438bbd2d74d4ac3176e953"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LongCall.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LongCall.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":20},"end":{"line":7,"column":50}},"5":{"start":{"line":8,"column":23},"end":{"line":8,"column":63}},"6":{"start":{"line":9,"column":31},"end":{"line":9,"column":65}},"7":{"start":{"line":10,"column":19},"end":{"line":24,"column":1}},"8":{"start":{"line":11,"column":14},"end":{"line":11,"column":44}},"9":{"start":{"line":12,"column":14},"end":{"line":12,"column":43}},"10":{"start":{"line":13,"column":14},"end":{"line":13,"column":43}},"11":{"start":{"line":14,"column":14},"end":{"line":14,"column":81}},"12":{"start":{"line":15,"column":16},"end":{"line":15,"column":45}},"13":{"start":{"line":16,"column":16},"end":{"line":16,"column":64}},"14":{"start":{"line":17,"column":24},"end":{"line":17,"column":93}},"15":{"start":{"line":18,"column":23},"end":{"line":18,"column":109}},"16":{"start":{"line":19,"column":4},"end":{"line":23,"column":6}},"17":{"start":{"line":25,"column":28},"end":{"line":41,"column":1}},"18":{"start":{"line":26,"column":40},"end":{"line":26,"column":103}},"19":{"start":{"line":27,"column":27},"end":{"line":27,"column":61}},"20":{"start":{"line":28,"column":4},"end":{"line":28,"column":41}},"21":{"start":{"line":29,"column":4},"end":{"line":29,"column":47}},"22":{"start":{"line":30,"column":4},"end":{"line":30,"column":39}},"23":{"start":{"line":31,"column":4},"end":{"line":36,"column":7}},"24":{"start":{"line":37,"column":4},"end":{"line":40,"column":6}},"25":{"start":{"line":42,"column":0},"end":{"line":42,"column":55}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":19},"end":{"line":10,"column":20}},"loc":{"start":{"line":10,"column":76},"end":{"line":24,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":25,"column":28},"end":{"line":25,"column":29}},"loc":{"start":{"line":25,"column":102},"end":{"line":41,"column":1}},"line":25}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":2,"10":2,"11":2,"12":2,"13":2,"14":2,"15":2,"16":2,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1},"f":{"0":1,"1":2,"2":1},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LongCall.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LongCall.ts"],"names":[],"mappings":";;;;;;AAAA,mDAAuD;AACvD,gEAA8B;AAE9B,kEAA+D;AAE/D,MAAM,UAAU,GAAG,CACjB,WAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,YAAoB,EAKpB,EAAE;IACF,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE1D,MAAM,GAAG,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,sBAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAG,IAAI,2CAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnE,MAAM,UAAU,GAAG,MAAM,CACvB,IAAI,sBAAE,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC3D,CAAC;IAEF,OAAO;QACL,UAAU;QACV,eAAe,EAAE,YAAY;QAC7B,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,WAAmB,EACnB,YAAoB,EACpB,eAAuB,EACvB,UAAkB,EAClB,YAAoB,EAC2C,EAAE;IACjE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,UAAU,CAC5C,WAAW,EACX,YAAY,EACZ,UAAU,EACV,YAAY,CACb,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,4BAAgB,EAAE,CAAC;IAC9C,cAAc,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrC,cAAc,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3C,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;IAEnC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,gBAAgB,EAAE,WAAW,CAAC,kBAAkB,EAAE;QAClD,QAAQ,EAAE,UAAU;QACpB,cAAc,EAAE,eAAe;QAC/B,cAAc,EAAE,CAAC;KAClB,CAAC,CAAC;IAEH,OAAO;QACL,cAAc;QACd,eAAe;KAChB,CAAC;AACJ,CAAC,CAAC;AAEW,QAAA,QAAQ,GAAG,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { PayoutFunctionV0 } from '@node-dlc/messaging';\nimport BN from 'bignumber.js';\n\nimport { HyperbolaPayoutCurve } from '../HyperbolaPayoutCurve';\n\nconst buildCurve = (\n  strikePrice: bigint,\n  contractSize: bigint,\n  oracleBase: number,\n  oracleDigits: number,\n): {\n  maxOutcome: bigint;\n  totalCollateral: bigint;\n  payoutCurve: HyperbolaPayoutCurve;\n} => {\n  const a = new BN(-1);\n  const b = new BN(0);\n  const c = new BN(0);\n  const d = new BN((strikePrice * contractSize).toString());\n\n  const f_1 = new BN(0);\n  const f_2 = new BN(Number(contractSize));\n\n  const payoutCurve = new HyperbolaPayoutCurve(a, b, c, d, f_1, f_2);\n\n  const maxOutcome = BigInt(\n    new BN(oracleBase).pow(oracleDigits).minus(1).toString(10),\n  );\n\n  return {\n    maxOutcome,\n    totalCollateral: contractSize,\n    payoutCurve,\n  };\n};\n\nconst buildPayoutFunction = (\n  strikePrice: bigint,\n  contractSize: bigint,\n  totalCollateral: bigint,\n  oracleBase: number,\n  oracleDigits: number,\n): { payoutFunction: PayoutFunctionV0; totalCollateral: bigint } => {\n  const { maxOutcome, payoutCurve } = buildCurve(\n    strikePrice,\n    contractSize,\n    oracleBase,\n    oracleDigits,\n  );\n\n  const payoutFunction = new PayoutFunctionV0();\n  payoutFunction.endpoint0 = BigInt(0);\n  payoutFunction.endpointPayout0 = BigInt(0);\n  payoutFunction.extraPrecision0 = 0;\n\n  payoutFunction.pieces.push({\n    payoutCurvePiece: payoutCurve.toPayoutCurvePiece(),\n    endpoint: maxOutcome,\n    endpointPayout: totalCollateral,\n    extraPrecision: 0,\n  });\n\n  return {\n    payoutFunction,\n    totalCollateral,\n  };\n};\n\nexport const LongCall = { buildCurve, buildPayoutFunction };\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"cfb79ef3aa7b2397b91d878006ef8fc3f1c42a1a","contentHash":"98b6198e95d77c6818591825c0a166a777b388071ae34ca08b95b85f90b5eb68"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LongPut.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LongPut.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":25}},"4":{"start":{"line":7,"column":20},"end":{"line":7,"column":50}},"5":{"start":{"line":8,"column":23},"end":{"line":8,"column":63}},"6":{"start":{"line":9,"column":31},"end":{"line":9,"column":65}},"7":{"start":{"line":10,"column":19},"end":{"line":24,"column":1}},"8":{"start":{"line":11,"column":14},"end":{"line":11,"column":43}},"9":{"start":{"line":12,"column":14},"end":{"line":12,"column":43}},"10":{"start":{"line":13,"column":14},"end":{"line":13,"column":43}},"11":{"start":{"line":14,"column":14},"end":{"line":14,"column":81}},"12":{"start":{"line":15,"column":16},"end":{"line":15,"column":45}},"13":{"start":{"line":16,"column":16},"end":{"line":16,"column":65}},"14":{"start":{"line":17,"column":24},"end":{"line":17,"column":93}},"15":{"start":{"line":18,"column":23},"end":{"line":18,"column":109}},"16":{"start":{"line":19,"column":4},"end":{"line":23,"column":6}},"17":{"start":{"line":25,"column":28},"end":{"line":41,"column":1}},"18":{"start":{"line":26,"column":40},"end":{"line":26,"column":103}},"19":{"start":{"line":27,"column":27},"end":{"line":27,"column":61}},"20":{"start":{"line":28,"column":4},"end":{"line":28,"column":41}},"21":{"start":{"line":29,"column":4},"end":{"line":29,"column":53}},"22":{"start":{"line":30,"column":4},"end":{"line":30,"column":39}},"23":{"start":{"line":31,"column":4},"end":{"line":36,"column":7}},"24":{"start":{"line":37,"column":4},"end":{"line":40,"column":6}},"25":{"start":{"line":42,"column":0},"end":{"line":42,"column":54}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":19},"end":{"line":10,"column":20}},"loc":{"start":{"line":10,"column":76},"end":{"line":24,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":25,"column":28},"end":{"line":25,"column":29}},"loc":{"start":{"line":25,"column":102},"end":{"line":41,"column":1}},"line":25}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":2,"10":2,"11":2,"12":2,"13":2,"14":2,"15":2,"16":2,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1},"f":{"0":1,"1":2,"2":1},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LongPut.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/LongPut.ts"],"names":[],"mappings":";;;;;;AAAA,mDAAuD;AACvD,gEAA8B;AAE9B,kEAA+D;AAE/D,MAAM,UAAU,GAAG,CACjB,WAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,YAAoB,EAKpB,EAAE;IACF,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,sBAAE,CAAC,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE1D,MAAM,GAAG,GAAG,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,sBAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAE1C,MAAM,WAAW,GAAG,IAAI,2CAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnE,MAAM,UAAU,GAAG,MAAM,CACvB,IAAI,sBAAE,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC3D,CAAC;IAEF,OAAO;QACL,UAAU;QACV,eAAe,EAAE,YAAY;QAC7B,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,WAAmB,EACnB,YAAoB,EACpB,eAAuB,EACvB,UAAkB,EAClB,YAAoB,EAC2C,EAAE;IACjE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,UAAU,CAC5C,WAAW,EACX,YAAY,EACZ,UAAU,EACV,YAAY,CACb,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,4BAAgB,EAAE,CAAC;IAC9C,cAAc,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrC,cAAc,CAAC,eAAe,GAAG,eAAe,CAAC;IACjD,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;IAEnC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,gBAAgB,EAAE,WAAW,CAAC,kBAAkB,EAAE;QAClD,QAAQ,EAAE,UAAU;QACpB,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QACzB,cAAc,EAAE,CAAC;KAClB,CAAC,CAAC;IAEH,OAAO;QACL,cAAc;QACd,eAAe;KAChB,CAAC;AACJ,CAAC,CAAC;AAEW,QAAA,OAAO,GAAG,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { PayoutFunctionV0 } from '@node-dlc/messaging';\nimport BN from 'bignumber.js';\n\nimport { HyperbolaPayoutCurve } from '../HyperbolaPayoutCurve';\n\nconst buildCurve = (\n  strikePrice: bigint,\n  contractSize: bigint,\n  oracleBase: number,\n  oracleDigits: number,\n): {\n  maxOutcome: bigint;\n  totalCollateral: bigint;\n  payoutCurve: HyperbolaPayoutCurve;\n} => {\n  const a = new BN(1);\n  const b = new BN(0);\n  const c = new BN(0);\n  const d = new BN((strikePrice * contractSize).toString());\n\n  const f_1 = new BN(0);\n  const f_2 = new BN(-Number(contractSize));\n\n  const payoutCurve = new HyperbolaPayoutCurve(a, b, c, d, f_1, f_2);\n\n  const maxOutcome = BigInt(\n    new BN(oracleBase).pow(oracleDigits).minus(1).toString(10),\n  );\n\n  return {\n    maxOutcome,\n    totalCollateral: contractSize,\n    payoutCurve,\n  };\n};\n\nconst buildPayoutFunction = (\n  strikePrice: bigint,\n  contractSize: bigint,\n  totalCollateral: bigint,\n  oracleBase: number,\n  oracleDigits: number,\n): { payoutFunction: PayoutFunctionV0; totalCollateral: bigint } => {\n  const { maxOutcome, payoutCurve } = buildCurve(\n    strikePrice,\n    contractSize,\n    oracleBase,\n    oracleDigits,\n  );\n\n  const payoutFunction = new PayoutFunctionV0();\n  payoutFunction.endpoint0 = BigInt(0);\n  payoutFunction.endpointPayout0 = totalCollateral;\n  payoutFunction.extraPrecision0 = 0;\n\n  payoutFunction.pieces.push({\n    payoutCurvePiece: payoutCurve.toPayoutCurvePiece(),\n    endpoint: maxOutcome,\n    endpointPayout: BigInt(0),\n    extraPrecision: 0,\n  });\n\n  return {\n    payoutFunction,\n    totalCollateral,\n  };\n};\n\nexport const LongPut = { buildCurve, buildPayoutFunction };\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"8d6ce50e269fb9aa0bacb94b69a13ca9b19790b3","contentHash":"af8f8aa736b8abae4960292554e55f955de734af4ef6f7aef66bd76dab0337bc"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/CsoInfo.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/CsoInfo.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":200}},"4":{"start":{"line":7,"column":18},"end":{"line":7,"column":46}},"5":{"start":{"line":8,"column":20},"end":{"line":8,"column":50}},"6":{"start":{"line":9,"column":17},"end":{"line":9,"column":51}},"7":{"start":{"line":10,"column":21},"end":{"line":10,"column":59}},"8":{"start":{"line":11,"column":18},"end":{"line":11,"column":38}},"9":{"start":{"line":12,"column":25},"end":{"line":12,"column":55}},"10":{"start":{"line":34,"column":43},"end":{"line":70,"column":1}},"11":{"start":{"line":35,"column":31},"end":{"line":35,"column":130}},"12":{"start":{"line":36,"column":32},"end":{"line":36,"column":62}},"13":{"start":{"line":37,"column":23},"end":{"line":40,"column":32}},"14":{"start":{"line":41,"column":4},"end":{"line":48,"column":5}},"15":{"start":{"line":42,"column":8},"end":{"line":42,"column":42}},"16":{"start":{"line":43,"column":8},"end":{"line":43,"column":40}},"17":{"start":{"line":45,"column":9},"end":{"line":48,"column":5}},"18":{"start":{"line":46,"column":8},"end":{"line":46,"column":42}},"19":{"start":{"line":47,"column":8},"end":{"line":47,"column":40}},"20":{"start":{"line":49,"column":30},"end":{"line":49,"column":53}},"21":{"start":{"line":50,"column":4},"end":{"line":50,"column":44}},"22":{"start":{"line":51,"column":30},"end":{"line":51,"column":54}},"23":{"start":{"line":52,"column":4},"end":{"line":52,"column":45}},"24":{"start":{"line":53,"column":35},"end":{"line":56,"column":20}},"25":{"start":{"line":57,"column":35},"end":{"line":60,"column":20}},"26":{"start":{"line":61,"column":28},"end":{"line":61,"column":46}},"27":{"start":{"line":62,"column":4},"end":{"line":62,"column":113}},"28":{"start":{"line":63,"column":4},"end":{"line":69,"column":6}},"29":{"start":{"line":71,"column":0},"end":{"line":71,"column":80}},"30":{"start":{"line":94,"column":43},"end":{"line":120,"column":1}},"31":{"start":{"line":95,"column":25},"end":{"line":96,"column":59}},"32":{"start":{"line":97,"column":4},"end":{"line":104,"column":5}},"33":{"start":{"line":98,"column":8},"end":{"line":98,"column":44}},"34":{"start":{"line":99,"column":8},"end":{"line":99,"column":42}},"35":{"start":{"line":101,"column":9},"end":{"line":104,"column":5}},"36":{"start":{"line":102,"column":8},"end":{"line":102,"column":44}},"37":{"start":{"line":103,"column":8},"end":{"line":103,"column":42}},"38":{"start":{"line":105,"column":30},"end":{"line":105,"column":53}},"39":{"start":{"line":106,"column":4},"end":{"line":106,"column":44}},"40":{"start":{"line":107,"column":30},"end":{"line":107,"column":54}},"41":{"start":{"line":108,"column":4},"end":{"line":108,"column":45}},"42":{"start":{"line":109,"column":35},"end":{"line":109,"column":217}},"43":{"start":{"line":110,"column":35},"end":{"line":110,"column":217}},"44":{"start":{"line":111,"column":28},"end":{"line":111,"column":46}},"45":{"start":{"line":112,"column":4},"end":{"line":112,"column":48}},"46":{"start":{"line":113,"column":4},"end":{"line":119,"column":6}},"47":{"start":{"line":121,"column":0},"end":{"line":121,"column":80}},"48":{"start":{"line":146,"column":35},"end":{"line":192,"column":1}},"49":{"start":{"line":147,"column":4},"end":{"line":148,"column":63}},"50":{"start":{"line":148,"column":8},"end":{"line":148,"column":63}},"51":{"start":{"line":149,"column":25},"end":{"line":149,"column":38}},"52":{"start":{"line":150,"column":4},"end":{"line":151,"column":69}},"53":{"start":{"line":151,"column":8},"end":{"line":151,"column":69}},"54":{"start":{"line":152,"column":23},"end":{"line":152,"column":46}},"55":{"start":{"line":153,"column":35},"end":{"line":153,"column":70}},"56":{"start":{"line":154,"column":28},"end":{"line":155,"column":24}},"57":{"start":{"line":156,"column":4},"end":{"line":158,"column":84}},"58":{"start":{"line":158,"column":8},"end":{"line":158,"column":84}},"59":{"start":{"line":159,"column":31},"end":{"line":159,"column":62}},"60":{"start":{"line":160,"column":4},"end":{"line":161,"column":65}},"61":{"start":{"line":161,"column":8},"end":{"line":161,"column":65}},"62":{"start":{"line":162,"column":27},"end":{"line":162,"column":60}},"63":{"start":{"line":163,"column":4},"end":{"line":163,"column":59}},"64":{"start":{"line":164,"column":25},"end":{"line":164,"column":49}},"65":{"start":{"line":165,"column":21},"end":{"line":165,"column":45}},"66":{"start":{"line":166,"column":22},"end":{"line":166,"column":49}},"67":{"start":{"line":167,"column":22},"end":{"line":167,"column":45}},"68":{"start":{"line":168,"column":25},"end":{"line":168,"column":46}},"69":{"start":{"line":169,"column":23},"end":{"line":169,"column":40}},"70":{"start":{"line":170,"column":17},"end":{"line":170,"column":37}},"71":{"start":{"line":171,"column":23},"end":{"line":171,"column":77}},"72":{"start":{"line":172,"column":25},"end":{"line":172,"column":93}},"73":{"start":{"line":173,"column":30},"end":{"line":173,"column":116}},"74":{"start":{"line":174,"column":28},"end":{"line":174,"column":112}},"75":{"start":{"line":175,"column":45},"end":{"line":177,"column":52}},"76":{"start":{"line":178,"column":119},"end":{"line":178,"column":239}},"77":{"start":{"line":179,"column":19},"end":{"line":179,"column":54}},"78":{"start":{"line":180,"column":4},"end":{"line":191,"column":6}},"79":{"start":{"line":193,"column":0},"end":{"line":193,"column":64}},"80":{"start":{"line":200,"column":28},"end":{"line":216,"column":1}},"81":{"start":{"line":201,"column":4},"end":{"line":203,"column":76}},"82":{"start":{"line":203,"column":8},"end":{"line":203,"column":76}},"83":{"start":{"line":204,"column":23},"end":{"line":204,"column":32}},"84":{"start":{"line":205,"column":17},"end":{"line":205,"column":39}},"85":{"start":{"line":206,"column":25},"end":{"line":206,"column":47}},"86":{"start":{"line":207,"column":4},"end":{"line":211,"column":5}},"87":{"start":{"line":208,"column":8},"end":{"line":208,"column":55}},"88":{"start":{"line":209,"column":8},"end":{"line":209,"column":68}},"89":{"start":{"line":210,"column":8},"end":{"line":210,"column":84}},"90":{"start":{"line":212,"column":25},"end":{"line":212,"column":130}},"91":{"start":{"line":213,"column":4},"end":{"line":214,"column":69}},"92":{"start":{"line":214,"column":8},"end":{"line":214,"column":69}},"93":{"start":{"line":215,"column":4},"end":{"line":215,"column":24}},"94":{"start":{"line":217,"column":0},"end":{"line":217,"column":50}},"95":{"start":{"line":228,"column":34},"end":{"line":264,"column":1}},"96":{"start":{"line":229,"column":4},"end":{"line":229,"column":115}},"97":{"start":{"line":230,"column":4},"end":{"line":263,"column":5}},"98":{"start":{"line":231,"column":8},"end":{"line":231,"column":185}},"99":{"start":{"line":232,"column":33},"end":{"line":232,"column":55}},"100":{"start":{"line":233,"column":23},"end":{"line":233,"column":46}},"101":{"start":{"line":235,"column":8},"end":{"line":235,"column":160}},"102":{"start":{"line":238,"column":8},"end":{"line":243,"column":9}},"103":{"start":{"line":239,"column":12},"end":{"line":239,"column":57}},"104":{"start":{"line":240,"column":12},"end":{"line":240,"column":67}},"105":{"start":{"line":241,"column":12},"end":{"line":241,"column":142}},"106":{"start":{"line":242,"column":12},"end":{"line":242,"column":173}},"107":{"start":{"line":244,"column":8},"end":{"line":262,"column":9}},"108":{"start":{"line":247,"column":16},"end":{"line":247,"column":81}},"109":{"start":{"line":249,"column":16},"end":{"line":249,"column":95}},"110":{"start":{"line":250,"column":16},"end":{"line":250,"column":167}},"111":{"start":{"line":251,"column":16},"end":{"line":251,"column":22}},"112":{"start":{"line":254,"column":16},"end":{"line":254,"column":91}},"113":{"start":{"line":255,"column":16},"end":{"line":255,"column":182}},"114":{"start":{"line":256,"column":16},"end":{"line":256,"column":22}},"115":{"start":{"line":259,"column":16},"end":{"line":259,"column":93}},"116":{"start":{"line":260,"column":16},"end":{"line":260,"column":167}},"117":{"start":{"line":261,"column":16},"end":{"line":261,"column":22}},"118":{"start":{"line":265,"column":0},"end":{"line":265,"column":62}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":34,"column":43},"end":{"line":34,"column":44}},"loc":{"start":{"line":34,"column":135},"end":{"line":70,"column":1}},"line":34},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":43},"end":{"line":94,"column":44}},"loc":{"start":{"line":94,"column":135},"end":{"line":120,"column":1}},"line":94},"3":{"name":"(anonymous_3)","decl":{"start":{"line":146,"column":35},"end":{"line":146,"column":36}},"loc":{"start":{"line":146,"column":150},"end":{"line":192,"column":1}},"line":146},"4":{"name":"(anonymous_4)","decl":{"start":{"line":200,"column":28},"end":{"line":200,"column":29}},"loc":{"start":{"line":200,"column":58},"end":{"line":216,"column":1}},"line":200},"5":{"name":"(anonymous_5)","decl":{"start":{"line":228,"column":34},"end":{"line":228,"column":35}},"loc":{"start":{"line":228,"column":54},"end":{"line":264,"column":1}},"line":228}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":37,"column":23},"end":{"line":40,"column":32}},"type":"cond-expr","locations":[{"start":{"line":38,"column":10},"end":{"line":39,"column":55}},{"start":{"line":40,"column":10},"end":{"line":40,"column":32}}],"line":37},"4":{"loc":{"start":{"line":41,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":48,"column":5}},{"start":{"line":41,"column":4},"end":{"line":48,"column":5}}],"line":41},"5":{"loc":{"start":{"line":45,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":48,"column":5}},{"start":{"line":45,"column":9},"end":{"line":48,"column":5}}],"line":45},"6":{"loc":{"start":{"line":97,"column":4},"end":{"line":104,"column":5}},"type":"if","locations":[{"start":{"line":97,"column":4},"end":{"line":104,"column":5}},{"start":{"line":97,"column":4},"end":{"line":104,"column":5}}],"line":97},"7":{"loc":{"start":{"line":101,"column":9},"end":{"line":104,"column":5}},"type":"if","locations":[{"start":{"line":101,"column":9},"end":{"line":104,"column":5}},{"start":{"line":101,"column":9},"end":{"line":104,"column":5}}],"line":101},"8":{"loc":{"start":{"line":146,"column":51},"end":{"line":146,"column":75}},"type":"default-arg","locations":[{"start":{"line":146,"column":66},"end":{"line":146,"column":75}}],"line":146},"9":{"loc":{"start":{"line":146,"column":77},"end":{"line":146,"column":111}},"type":"default-arg","locations":[{"start":{"line":146,"column":84},"end":{"line":146,"column":111}}],"line":146},"10":{"loc":{"start":{"line":146,"column":128},"end":{"line":146,"column":145}},"type":"default-arg","locations":[{"start":{"line":146,"column":141},"end":{"line":146,"column":145}}],"line":146},"11":{"loc":{"start":{"line":147,"column":4},"end":{"line":148,"column":63}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":148,"column":63}},{"start":{"line":147,"column":4},"end":{"line":148,"column":63}}],"line":147},"12":{"loc":{"start":{"line":150,"column":4},"end":{"line":151,"column":69}},"type":"if","locations":[{"start":{"line":150,"column":4},"end":{"line":151,"column":69}},{"start":{"line":150,"column":4},"end":{"line":151,"column":69}}],"line":150},"13":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":84}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":84}},{"start":{"line":156,"column":4},"end":{"line":158,"column":84}}],"line":156},"14":{"loc":{"start":{"line":160,"column":4},"end":{"line":161,"column":65}},"type":"if","locations":[{"start":{"line":160,"column":4},"end":{"line":161,"column":65}},{"start":{"line":160,"column":4},"end":{"line":161,"column":65}}],"line":160},"15":{"loc":{"start":{"line":172,"column":25},"end":{"line":172,"column":93}},"type":"cond-expr","locations":[{"start":{"line":172,"column":67},"end":{"line":172,"column":80}},{"start":{"line":172,"column":83},"end":{"line":172,"column":93}}],"line":172},"16":{"loc":{"start":{"line":172,"column":25},"end":{"line":172,"column":64}},"type":"binary-expr","locations":[{"start":{"line":172,"column":25},"end":{"line":172,"column":38}},{"start":{"line":172,"column":42},"end":{"line":172,"column":64}}],"line":172},"17":{"loc":{"start":{"line":175,"column":45},"end":{"line":177,"column":52}},"type":"cond-expr","locations":[{"start":{"line":176,"column":10},"end":{"line":176,"column":52}},{"start":{"line":177,"column":10},"end":{"line":177,"column":52}}],"line":175},"18":{"loc":{"start":{"line":200,"column":36},"end":{"line":200,"column":53}},"type":"default-arg","locations":[{"start":{"line":200,"column":49},"end":{"line":200,"column":53}}],"line":200},"19":{"loc":{"start":{"line":201,"column":4},"end":{"line":203,"column":76}},"type":"if","locations":[{"start":{"line":201,"column":4},"end":{"line":203,"column":76}},{"start":{"line":201,"column":4},"end":{"line":203,"column":76}}],"line":201},"20":{"loc":{"start":{"line":201,"column":8},"end":{"line":202,"column":59}},"type":"binary-expr","locations":[{"start":{"line":201,"column":8},"end":{"line":201,"column":57}},{"start":{"line":202,"column":8},"end":{"line":202,"column":59}}],"line":201},"21":{"loc":{"start":{"line":207,"column":4},"end":{"line":211,"column":5}},"type":"if","locations":[{"start":{"line":207,"column":4},"end":{"line":211,"column":5}},{"start":{"line":207,"column":4},"end":{"line":211,"column":5}}],"line":207},"22":{"loc":{"start":{"line":213,"column":4},"end":{"line":214,"column":69}},"type":"if","locations":[{"start":{"line":213,"column":4},"end":{"line":214,"column":69}},{"start":{"line":213,"column":4},"end":{"line":214,"column":69}}],"line":213},"23":{"loc":{"start":{"line":238,"column":8},"end":{"line":243,"column":9}},"type":"if","locations":[{"start":{"line":238,"column":8},"end":{"line":243,"column":9}},{"start":{"line":238,"column":8},"end":{"line":243,"column":9}}],"line":238},"24":{"loc":{"start":{"line":244,"column":8},"end":{"line":262,"column":9}},"type":"switch","locations":[{"start":{"line":245,"column":12},"end":{"line":251,"column":22}},{"start":{"line":252,"column":12},"end":{"line":256,"column":22}},{"start":{"line":257,"column":12},"end":{"line":261,"column":22}}],"line":244}},"s":{"0":1,"1":2,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":3,"12":3,"13":3,"14":3,"15":1,"16":1,"17":2,"18":0,"19":0,"20":3,"21":3,"22":3,"23":3,"24":3,"25":3,"26":3,"27":3,"28":3,"29":1,"30":1,"31":79,"32":79,"33":8,"34":8,"35":71,"36":66,"37":66,"38":79,"39":79,"40":79,"41":79,"42":79,"43":79,"44":79,"45":79,"46":79,"47":1,"48":1,"49":82,"50":0,"51":82,"52":82,"53":0,"54":82,"55":82,"56":82,"57":82,"58":0,"59":82,"60":82,"61":0,"62":82,"63":82,"64":82,"65":82,"66":82,"67":82,"68":82,"69":82,"70":82,"71":82,"72":82,"73":82,"74":82,"75":82,"76":82,"77":82,"78":82,"79":1,"80":1,"81":78,"82":0,"83":78,"84":78,"85":78,"86":78,"87":76,"88":76,"89":76,"90":78,"91":78,"92":1,"93":77,"94":1,"95":1,"96":85,"97":85,"98":251,"99":251,"100":251,"101":251,"102":250,"103":165,"104":165,"105":165,"106":165,"107":250,"108":85,"109":85,"110":85,"111":84,"112":83,"113":82,"114":82,"115":82,"116":82,"117":82,"118":1},"f":{"0":2,"1":3,"2":79,"3":82,"4":78,"5":85},"b":{"0":[1,1,1],"1":[0,2],"2":[2,2],"3":[3,0],"4":[1,2],"5":[0,2],"6":[8,71],"7":[66,5],"8":[0],"9":[0],"10":[3],"11":[0,82],"12":[0,82],"13":[0,82],"14":[0,82],"15":[76,6],"16":[82,78],"17":[3,79],"18":[68],"19":[0,78],"20":[78,76],"21":[76,2],"22":[1,77],"23":[165,85],"24":[85,83,82]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/CsoInfo.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/CsoInfo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Value } from '@node-dlc/bitcoin';\nimport {\n  ContractDescriptorV1,\n  ContractInfo,\n  ContractInfoV0,\n  DigitDecompositionEventDescriptorV0,\n  MessageType,\n  OrderPositionInfo,\n  OrderPositionInfoV0,\n  PayoutFunctionV0,\n  PolynomialPayoutCurvePiece,\n} from '@node-dlc/messaging';\nimport assert from 'assert';\nimport Decimal from 'decimal.js';\n\nimport {\n  DlcParty,\n  roundToNearestMultiplier,\n  roundUpToNearestMultiplier,\n  UNIT_MULTIPLIER,\n} from './Builder';\nimport {\n  HasContractInfo,\n  HasOfferCollateralSatoshis,\n  HasType,\n} from './OptionInfo';\n\nexport interface CsoInfo {\n  normalizedMaxGain: Value; // Max Gain Relative to 1 BTC Contract\n  normalizedMaxLoss: Value; // Max Loss Relative to 1 BTC Contract\n  maxGainForContractSize: Value; // Max Gain Relative to Contract Size\n  maxLossForContractSize: Value; // Max Loss Relative to Contract Size\n  minPayout: bigint;\n  maxPayout: bigint;\n  contractSize: Value;\n  offerCollateral: Value;\n  totalCollateral: Value;\n  expiry: Date;\n}\n\nexport interface CsoInfoParams {\n  normalizedMaxGain: Value; // Max Gain Relative to 1 BTC Contract\n  normalizedMaxLoss: Value; // Max Loss Relative to 1 BTC Contract\n  maxGainForContractSize: Value; // Max Gain Relative to Contract Size\n  maxLossForContractSize: Value; // Max Loss Relative to Contract Size\n  offerCollateral: Value; // Offer Collateral\n}\n\nconst ONE_BTC_CONTRACT = Value.fromBitcoin(1);\n\nexport type MaybeHasPositionInfo = {\n  positionInfo?: OrderPositionInfo;\n};\n\n/**\n * getCsoInfoParamsFromContractInfo V0\n *\n * Old getCsoInfoParamsFromContractInfo implementation\n *\n * @param {Value} contractSize - The size of the contract in terms of value.\n * @param {Value} collateral - The collateral value put up for the contract.\n * @param {DlcParty} shiftForFees - Specifies which party ('offeror' or 'acceptor') will bear the fees, affecting the outcome values.\n * @param {Value} fees - The fees associated with the contract.\n * @param {string} unit - The unit of measurement for the contract outcomes (e.g., 'BTC').\n * @param {Value} startOutcomeValue - The starting outcome value for the contract.\n * @param {Value} endOutcomeValue - The ending outcome value for the contract.\n * @returns {CsoInfoParams} An object containing the calculated CSO parameters:\n *                          - normalizedMaxGain: Maximum gain relative to a 1 BTC contract.\n *                          - normalizedMaxLoss: Maximum loss relative to a 1 BTC contract.\n *                          - maxGainForContractSize: Maximum gain for the actual contract size.\n *                          - maxLossForContractSize: Maximum loss for the actual contract size.\n *                          - offerCollateral: The offer collateral value after adjustments.\n *\n * Note: This function calculates the adjusted fees incorrectly, using collateral instead of contract size. Use v1 where possible.\n */\nexport const getCsoInfoParamsFromContractInfoV0 = (\n  contractSize: Value,\n  collateral: Value,\n  shiftForFees: DlcParty,\n  fees: Value,\n  unit: string,\n  startOutcomeValue: Value,\n  endOutcomeValue: Value,\n): CsoInfoParams => {\n  const leverageMultiplier = parseFloat(\n    new Decimal(contractSize.bitcoin).dividedBy(collateral.bitcoin).toFixed(1),\n  );\n\n  const defaultContractSize = Value.fromBitcoin(1);\n\n  const shiftValue =\n    collateral.sats > 0\n      ? Value.fromSats(\n          roundToNearestMultiplier(\n            (fees.sats * defaultContractSize.sats) / collateral.sats, // WARNING: this should be contract size not collateral\n            UNIT_MULTIPLIER[unit.toLowerCase()], // (use v1 if possible)\n          ),\n        )\n      : Value.zero();\n\n  if (shiftForFees === 'offeror') {\n    startOutcomeValue.sub(shiftValue);\n    endOutcomeValue.sub(shiftValue);\n  } else if (shiftForFees === 'acceptor') {\n    startOutcomeValue.add(shiftValue);\n    endOutcomeValue.add(shiftValue);\n  }\n\n  const normalizedMaxGain = endOutcomeValue.clone();\n  normalizedMaxGain.sub(ONE_BTC_CONTRACT);\n\n  const normalizedMaxLoss = ONE_BTC_CONTRACT.clone();\n  normalizedMaxLoss.sub(startOutcomeValue);\n\n  const maxGainForContractSize = Value.fromBitcoin(\n    new Decimal(normalizedMaxGain.bitcoin)\n      .times(leverageMultiplier)\n      .toDecimalPlaces(5)\n      .toNumber(),\n  );\n\n  const maxLossForContractSize = Value.fromBitcoin(\n    new Decimal(normalizedMaxLoss.bitcoin)\n      .times(contractSize.bitcoin)\n      .toDecimalPlaces(\n        8 - Math.log10(Number(UNIT_MULTIPLIER[unit.toLowerCase()])),\n      )\n      .toNumber(),\n  );\n\n  const offerCollateral = collateral.clone();\n  offerCollateral.sub(\n    Value.fromSats(\n      (maxGainForContractSize.sats * collateral.sats) / BigInt(1e8),\n    ),\n  );\n\n  return {\n    normalizedMaxGain,\n    normalizedMaxLoss,\n    maxGainForContractSize,\n    maxLossForContractSize,\n    offerCollateral,\n  };\n};\n\n/**\n * getCsoInfoParamsFromContractInfo V1\n *\n * Fixed getCsoInfoParamsFromContractInfo implementation\n *\n * @param {Value} contractSize - The size of the contract in terms of value.\n * @param {Value} collateral - The collateral value put up for the contract.\n * @param {DlcParty} shiftForFees - Specifies which party ('offeror' or 'acceptor') will bear the fees, affecting the outcome values.\n * @param {Value} fees - The fees associated with the contract.\n * @param {string} unit - The unit of measurement for the contract outcomes (e.g., 'BTC').\n * @param {Value} startOutcomeValue - The starting outcome value for the contract.\n * @param {Value} endOutcomeValue - The ending outcome value for the contract.\n * @returns {CsoInfoParams} An object containing the calculated CSO parameters:\n *                          - normalizedMaxGain: Maximum gain relative to a 1 BTC contract.\n *                          - normalizedMaxLoss: Maximum loss relative to a 1 BTC contract.\n *                          - maxGainForContractSize: Maximum gain for the actual contract size.\n *                          - maxLossForContractSize: Maximum loss for the actual contract size.\n *                          - offerCollateral: The offer collateral value after adjustments.\n *\n * This version improves upon the previous by correctly adjusting fees based on the contract size, leading to more accurate\n * calculations of CSO parameters.\n */\nexport const getCsoInfoParamsFromContractInfoV1 = (\n  contractSize: Value,\n  collateral: Value,\n  shiftForFees: DlcParty,\n  fees: Value,\n  unit: string,\n  startOutcomeValue: Value,\n  endOutcomeValue: Value,\n): CsoInfoParams => {\n  const feesAdjusted = Value.fromSats(\n    roundToNearestMultiplier(\n      (fees.sats * BigInt(1e8)) / contractSize.sats, // NOTE: this is done correctly using contractSize\n      BigInt(UNIT_MULTIPLIER[unit.toLowerCase()]),\n    ),\n  );\n\n  if (shiftForFees === 'offeror') {\n    startOutcomeValue.sub(feesAdjusted);\n    endOutcomeValue.sub(feesAdjusted);\n  } else if (shiftForFees === 'acceptor') {\n    startOutcomeValue.add(feesAdjusted);\n    endOutcomeValue.add(feesAdjusted);\n  }\n\n  const normalizedMaxGain = endOutcomeValue.clone();\n  normalizedMaxGain.sub(ONE_BTC_CONTRACT);\n\n  const normalizedMaxLoss = ONE_BTC_CONTRACT.clone();\n  normalizedMaxLoss.sub(startOutcomeValue);\n\n  const maxGainForContractSize = Value.fromSats(\n    roundUpToNearestMultiplier(\n      (normalizedMaxGain.sats * contractSize.sats) / BigInt(1e8),\n      BigInt(UNIT_MULTIPLIER[unit.toLowerCase()]),\n    ),\n  );\n\n  const maxLossForContractSize = Value.fromSats(\n    roundUpToNearestMultiplier(\n      (normalizedMaxLoss.sats * contractSize.sats) / BigInt(1e8),\n      BigInt(UNIT_MULTIPLIER[unit.toLowerCase()]),\n    ),\n  );\n\n  const offerCollateral = collateral.clone();\n  offerCollateral.sub(maxGainForContractSize);\n\n  return {\n    normalizedMaxGain,\n    normalizedMaxLoss,\n    maxGainForContractSize,\n    maxLossForContractSize,\n    offerCollateral,\n  };\n};\n\n/**\n * Decode CsoInfo from a ContractInfo object. Essentially the opposite of buildCustomStrategyOrderOffer\n *\n * @param {_contractInfo} ContractInfo - Contract Info object, containing oracle and descriptor info\n * @param {DlcParty} shiftForFees - Specifies which party ('offeror', 'acceptor', or 'neither') will pay for network fees\n * @param {Value} fees - Network fees associated with the contract. Defaults to 0 sats.\n * @param {_contractSize} Value - Optional.  If not provided, it defaults to the total collateral.\n * @param {csoVersion} 'v0' | 'v1' - Specifies the version of the CSO parameter calculation to use. Defaults to 'v1'.\n * @returns {CsoInfo} An object containing the calculated CSO information:\n *                    - normalizedMaxGain: Maximum gain relative to a 1 BTC contract.\n *                    - normalizedMaxLoss: Maximum loss relative to a 1 BTC contract.\n *                    - maxGainForContractSize: Maximum gain for the actual contract size.\n *                    - maxLossForContractSize: Maximum loss for the actual contract size.\n *                    - minPayout: Minimum payout as determined by the contract's payout function.\n *                    - maxPayout: Maximum payout as determined by the contract's payout function.\n *                    - contractSize: The size of the contract in terms of value.\n *                    - offerCollateral: The offer collateral value after adjustments.\n *                    - totalCollateral: The total collateral put up for the contract.\n *                    - expiry: The expiry date of the contract based on the oracle's event maturity epoch.\n *\n * Note: This function performs several validations to ensure that the contract information and its components are of the\n * expected types and formats.\n *       It throws errors if unsupported types or formats are encountered.\n */\nexport const getCsoInfoFromContractInfo = (\n  _contractInfo: ContractInfo,\n  shiftForFees: DlcParty = 'neither',\n  fees: Value = Value.fromSats(0),\n  _contractSize?: Value,\n  csoVersion: 'v0' | 'v1' = 'v1',\n): CsoInfo => {\n  if (_contractInfo.type !== MessageType.ContractInfoV0)\n    throw Error('Only ContractInfoV0 currently supported');\n\n  const contractInfo = _contractInfo as ContractInfoV0;\n  if (contractInfo.contractDescriptor.type !== MessageType.ContractDescriptorV1)\n    throw Error('Only ContractDescriptorV1 currently supported');\n\n  const oracleInfo = contractInfo.oracleInfo;\n\n  const { eventMaturityEpoch } = oracleInfo.announcement.oracleEvent;\n\n  const eventDescriptor = oracleInfo.announcement.oracleEvent\n    .eventDescriptor as DigitDecompositionEventDescriptorV0;\n\n  if (\n    oracleInfo.announcement.oracleEvent.eventDescriptor.type !==\n    MessageType.DigitDecompositionEventDescriptorV0\n  )\n    throw Error('Only DigitDecompositionEventDescriptorV0 currently supported');\n\n  const contractDescriptor = contractInfo.contractDescriptor as ContractDescriptorV1;\n  if (contractDescriptor.payoutFunction.type !== MessageType.PayoutFunctionV0)\n    throw Error('Only PayoutFunctionV0 currently supported');\n\n  const payoutFunction = contractDescriptor.payoutFunction as PayoutFunctionV0;\n\n  validateCsoPayoutFunction(payoutFunction);\n\n  const initialPiece = payoutFunction.pieces[0];\n  const midPiece = payoutFunction.pieces[1];\n\n  const minPayout = initialPiece.endpointPayout;\n  const maxPayout = midPiece.endpointPayout;\n\n  const startOutcome = initialPiece.endpoint;\n  const endOutcome = midPiece.endpoint;\n\n  const unit = eventDescriptor.unit;\n\n  const collateral = Value.fromSats(contractInfo.totalCollateral);\n  const contractSize =\n    _contractSize && _contractSize.sats > 0 ? _contractSize : collateral;\n\n  const startOutcomeValue = Value.fromSats(\n    startOutcome * UNIT_MULTIPLIER[unit.toLowerCase()],\n  );\n  const endOutcomeValue = Value.fromSats(\n    endOutcome * UNIT_MULTIPLIER[unit.toLowerCase()],\n  );\n\n  const getCsoInfoParamsFromContractInfo =\n    csoVersion === 'v0'\n      ? getCsoInfoParamsFromContractInfoV0\n      : getCsoInfoParamsFromContractInfoV1;\n\n  const {\n    normalizedMaxGain,\n    normalizedMaxLoss,\n    maxGainForContractSize,\n    maxLossForContractSize,\n    offerCollateral,\n  } = getCsoInfoParamsFromContractInfo(\n    contractSize,\n    collateral,\n    shiftForFees,\n    fees,\n    unit,\n    startOutcomeValue,\n    endOutcomeValue,\n  );\n\n  const expiry = new Date(eventMaturityEpoch * 1000);\n\n  return {\n    normalizedMaxGain,\n    normalizedMaxLoss,\n    maxGainForContractSize,\n    maxLossForContractSize,\n    minPayout,\n    maxPayout,\n    contractSize,\n    offerCollateral,\n    totalCollateral: collateral,\n    expiry,\n  };\n};\n\n/**\n * Get CsoInfo from OrderOffer or DlcOffer and validate\n *\n * @param {HasContractInfo & HasType} offer\n * @returns {CsoInfo}\n */\nexport const getCsoInfoFromOffer = (\n  offer: HasContractInfo &\n    HasType &\n    HasOfferCollateralSatoshis &\n    MaybeHasPositionInfo,\n  csoVersion: 'v0' | 'v1' = 'v1',\n): CsoInfo => {\n  if (\n    offer.type !== MessageType.DlcOfferV0 &&\n    offer.type !== MessageType.OrderOfferV0\n  )\n    throw Error('Only DlcOfferV0 and OrderOfferV0 currently supported');\n\n  let shiftForFees: DlcParty = 'neither';\n  const fees = Value.zero();\n  const contractSize = Value.zero();\n\n  if (offer.positionInfo) {\n    shiftForFees = (offer.positionInfo as OrderPositionInfoV0).shiftForFees;\n    fees.add(Value.fromSats((offer.positionInfo as OrderPositionInfoV0).fees));\n    contractSize.add(\n      Value.fromSats((offer.positionInfo as OrderPositionInfoV0).contractSize),\n    );\n  }\n\n  const positionInfo = getCsoInfoFromContractInfo(\n    offer.contractInfo,\n    shiftForFees,\n    fees,\n    contractSize,\n    csoVersion,\n  );\n\n  if (positionInfo.offerCollateral.sats !== offer.offerCollateralSatoshis)\n    throw Error('Offer was not generated with CSO ContractInfo');\n\n  return positionInfo;\n};\n\n/**\n * Validate Payout Function for proper CSO format\n *\n * It should have 3 PayoutCurvePieces which consist of a flat line (maxLoss),\n * ascending line (maxLoss to maxGain) and finally another flat line (maxGain)\n *\n * All PayoutCurvePieces should be type PolynomialPayoutCurvePieces\n *\n * @param {PayoutFunctionV0} payoutFunction\n */\nexport const validateCsoPayoutFunction = (\n  payoutFunction: PayoutFunctionV0,\n): void => {\n  assert(\n    payoutFunction.pieces.length === 3,\n    'CSO Payout Function must have 3 PayoutCurvePieces',\n  );\n  for (const [i, piece] of payoutFunction.pieces.entries()) {\n    assert(\n      piece.payoutCurvePiece.type === MessageType.PolynomialPayoutCurvePiece,\n      'CSO Payout Function PayoutCurvePieces must be PolynomialCurvePieces',\n    );\n\n    const payoutCurvePiece = piece.payoutCurvePiece as PolynomialPayoutCurvePiece;\n    const points = payoutCurvePiece.points;\n\n    // eventOutcome should always be ascending\n    assert(\n      points[0].eventOutcome < points[1].eventOutcome,\n      'CSO Payout Function PayoutCurvePiece point payout should be an ascending line',\n    );\n\n    // endpoints should always be ascending\n    let previousPiece, previousPoints;\n    if (i > 0) {\n      previousPiece = payoutFunction.pieces[i - 1];\n      previousPoints = previousPiece.payoutCurvePiece.points;\n      assert(\n        previousPiece.endpoint < piece.endpoint,\n        'CSO Payout Function point endpoints should be an ascending line',\n      );\n      assert(\n        previousPoints[1].outcomePayout === points[0].outcomePayout,\n        'CSO Payout Function point outcome payout should be continuous without gaps',\n      );\n    }\n\n    switch (i) {\n      case 0:\n        // endpoints should always be ascending\n        assert(payoutFunction.endpoint0 < piece.endpoint);\n\n        // maxLoss should be a flat line\n        assert(payoutFunction.endpointPayout0 === piece.endpointPayout);\n        assert(\n          points[0].outcomePayout === points[1].outcomePayout,\n          'CSO Payout Function maxLoss PayoutCurvePiece point should be a flat line',\n        );\n        break;\n      case 1:\n        // maxLoss to maxGain should be an ascending line\n        assert(previousPiece.endpointPayout < piece.endpointPayout);\n        assert(\n          points[0].outcomePayout < points[1].outcomePayout,\n          'CSO Payout Function maxLoss to maxGain PayoutCurvePiece point should be an ascending line',\n        );\n        break;\n      case 2:\n        // maxGain should be a flat line\n        assert(previousPiece.endpointPayout === piece.endpointPayout);\n        assert(\n          points[0].outcomePayout === points[1].outcomePayout,\n          'CSO Payout Function maxGain PayoutCurvePiece point should be a flat line',\n        );\n        break;\n    }\n  }\n};\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"2a996298d256d91c62e80f12a7fa3bd6988909f3","contentHash":"12cbbfe5e6f001def20e51b3a4a8949759e2bb7cbb94f2ddc0561a8978a93f8d"},"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/OptionInfo.ts":{"path":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/OptionInfo.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":62}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":80}},"4":{"start":{"line":7,"column":20},"end":{"line":7,"column":50}},"5":{"start":{"line":8,"column":23},"end":{"line":8,"column":63}},"6":{"start":{"line":9,"column":31},"end":{"line":9,"column":65}},"7":{"start":{"line":10,"column":22},"end":{"line":10,"column":46}},"8":{"start":{"line":11,"column":19},"end":{"line":11,"column":40}},"9":{"start":{"line":13,"column":4},"end":{"line":14,"column":63}},"10":{"start":{"line":14,"column":8},"end":{"line":14,"column":63}},"11":{"start":{"line":15,"column":25},"end":{"line":15,"column":38}},"12":{"start":{"line":16,"column":4},"end":{"line":17,"column":69}},"13":{"start":{"line":17,"column":8},"end":{"line":17,"column":69}},"14":{"start":{"line":18,"column":23},"end":{"line":18,"column":46}},"15":{"start":{"line":19,"column":35},"end":{"line":19,"column":70}},"16":{"start":{"line":20,"column":28},"end":{"line":21,"column":24}},"17":{"start":{"line":22,"column":57},"end":{"line":22,"column":72}},"18":{"start":{"line":23,"column":4},"end":{"line":25,"column":84}},"19":{"start":{"line":25,"column":8},"end":{"line":25,"column":84}},"20":{"start":{"line":26,"column":31},"end":{"line":26,"column":62}},"21":{"start":{"line":27,"column":4},"end":{"line":28,"column":65}},"22":{"start":{"line":28,"column":8},"end":{"line":28,"column":65}},"23":{"start":{"line":29,"column":27},"end":{"line":29,"column":60}},"24":{"start":{"line":30,"column":4},"end":{"line":31,"column":79}},"25":{"start":{"line":31,"column":8},"end":{"line":31,"column":79}},"26":{"start":{"line":32,"column":4},"end":{"line":33,"column":68}},"27":{"start":{"line":33,"column":8},"end":{"line":33,"column":68}},"28":{"start":{"line":34,"column":29},"end":{"line":35,"column":25}},"29":{"start":{"line":36,"column":4},"end":{"line":38,"column":57}},"30":{"start":{"line":38,"column":8},"end":{"line":38,"column":57}},"31":{"start":{"line":39,"column":4},"end":{"line":40,"column":74}},"32":{"start":{"line":40,"column":8},"end":{"line":40,"column":74}},"33":{"start":{"line":41,"column":18},"end":{"line":41,"column":100}},"34":{"start":{"line":42,"column":23},"end":{"line":42,"column":109}},"35":{"start":{"line":43,"column":24},"end":{"line":45,"column":51}},"36":{"start":{"line":46,"column":19},"end":{"line":46,"column":54}},"37":{"start":{"line":47,"column":28},"end":{"line":47,"column":56}},"38":{"start":{"line":49,"column":25},"end":{"line":51,"column":60}},"39":{"start":{"line":52,"column":24},"end":{"line":52,"column":57}},"40":{"start":{"line":54,"column":41},"end":{"line":56,"column":99}},"41":{"start":{"line":57,"column":17},"end":{"line":57,"column":45}},"42":{"start":{"line":58,"column":4},"end":{"line":59,"column":109}},"43":{"start":{"line":59,"column":8},"end":{"line":59,"column":109}},"44":{"start":{"line":60,"column":4},"end":{"line":60,"column":55}},"45":{"start":{"line":62,"column":0},"end":{"line":62,"column":70}},"46":{"start":{"line":64,"column":4},"end":{"line":66,"column":76}},"47":{"start":{"line":66,"column":8},"end":{"line":66,"column":76}},"48":{"start":{"line":67,"column":20},"end":{"line":67,"column":86}},"49":{"start":{"line":68,"column":4},"end":{"line":71,"column":6}},"50":{"start":{"line":73,"column":0},"end":{"line":73,"column":56}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":56},"end":{"line":2,"column":57}},"loc":{"start":{"line":2,"column":71},"end":{"line":4,"column":1}},"line":2},"1":{"name":"getOptionInfoFromContractInfo","decl":{"start":{"line":12,"column":9},"end":{"line":12,"column":38}},"loc":{"start":{"line":12,"column":54},"end":{"line":61,"column":1}},"line":12},"2":{"name":"getOptionInfoFromOffer","decl":{"start":{"line":63,"column":9},"end":{"line":63,"column":31}},"loc":{"start":{"line":63,"column":39},"end":{"line":72,"column":1}},"line":63}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":4,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":56},"end":{"line":4,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":11},"end":{"line":3,"column":61}},"type":"cond-expr","locations":[{"start":{"line":3,"column":37},"end":{"line":3,"column":40}},{"start":{"line":3,"column":43},"end":{"line":3,"column":61}}],"line":3},"2":{"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":33}},"type":"binary-expr","locations":[{"start":{"line":3,"column":12},"end":{"line":3,"column":15}},{"start":{"line":3,"column":19},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":13,"column":4},"end":{"line":14,"column":63}},"type":"if","locations":[{"start":{"line":13,"column":4},"end":{"line":14,"column":63}},{"start":{"line":13,"column":4},"end":{"line":14,"column":63}}],"line":13},"4":{"loc":{"start":{"line":16,"column":4},"end":{"line":17,"column":69}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":17,"column":69}},{"start":{"line":16,"column":4},"end":{"line":17,"column":69}}],"line":16},"5":{"loc":{"start":{"line":23,"column":4},"end":{"line":25,"column":84}},"type":"if","locations":[{"start":{"line":23,"column":4},"end":{"line":25,"column":84}},{"start":{"line":23,"column":4},"end":{"line":25,"column":84}}],"line":23},"6":{"loc":{"start":{"line":27,"column":4},"end":{"line":28,"column":65}},"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":28,"column":65}},{"start":{"line":27,"column":4},"end":{"line":28,"column":65}}],"line":27},"7":{"loc":{"start":{"line":30,"column":4},"end":{"line":31,"column":79}},"type":"if","locations":[{"start":{"line":30,"column":4},"end":{"line":31,"column":79}},{"start":{"line":30,"column":4},"end":{"line":31,"column":79}}],"line":30},"8":{"loc":{"start":{"line":32,"column":4},"end":{"line":33,"column":68}},"type":"if","locations":[{"start":{"line":32,"column":4},"end":{"line":33,"column":68}},{"start":{"line":32,"column":4},"end":{"line":33,"column":68}}],"line":32},"9":{"loc":{"start":{"line":36,"column":4},"end":{"line":38,"column":57}},"type":"if","locations":[{"start":{"line":36,"column":4},"end":{"line":38,"column":57}},{"start":{"line":36,"column":4},"end":{"line":38,"column":57}}],"line":36},"10":{"loc":{"start":{"line":36,"column":8},"end":{"line":37,"column":86}},"type":"binary-expr","locations":[{"start":{"line":36,"column":8},"end":{"line":36,"column":83}},{"start":{"line":37,"column":8},"end":{"line":37,"column":86}}],"line":36},"11":{"loc":{"start":{"line":39,"column":4},"end":{"line":40,"column":74}},"type":"if","locations":[{"start":{"line":39,"column":4},"end":{"line":40,"column":74}},{"start":{"line":39,"column":4},"end":{"line":40,"column":74}}],"line":39},"12":{"loc":{"start":{"line":39,"column":8},"end":{"line":39,"column":76}},"type":"binary-expr","locations":[{"start":{"line":39,"column":8},"end":{"line":39,"column":40}},{"start":{"line":39,"column":44},"end":{"line":39,"column":76}}],"line":39},"13":{"loc":{"start":{"line":49,"column":25},"end":{"line":51,"column":60}},"type":"cond-expr","locations":[{"start":{"line":50,"column":10},"end":{"line":50,"column":60}},{"start":{"line":51,"column":10},"end":{"line":51,"column":60}}],"line":49},"14":{"loc":{"start":{"line":54,"column":41},"end":{"line":56,"column":99}},"type":"cond-expr","locations":[{"start":{"line":55,"column":10},"end":{"line":55,"column":110}},{"start":{"line":56,"column":10},"end":{"line":56,"column":99}}],"line":54},"15":{"loc":{"start":{"line":57,"column":17},"end":{"line":57,"column":45}},"type":"cond-expr","locations":[{"start":{"line":57,"column":31},"end":{"line":57,"column":36}},{"start":{"line":57,"column":39},"end":{"line":57,"column":45}}],"line":57},"16":{"loc":{"start":{"line":58,"column":4},"end":{"line":59,"column":109}},"type":"if","locations":[{"start":{"line":58,"column":4},"end":{"line":59,"column":109}},{"start":{"line":58,"column":4},"end":{"line":59,"column":109}}],"line":58},"17":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":76}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":76}},{"start":{"line":64,"column":4},"end":{"line":66,"column":76}}],"line":64},"18":{"loc":{"start":{"line":64,"column":8},"end":{"line":65,"column":59}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":57}},{"start":{"line":65,"column":8},"end":{"line":65,"column":59}}],"line":64}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":6,"10":0,"11":6,"12":6,"13":0,"14":6,"15":6,"16":6,"17":6,"18":6,"19":0,"20":6,"21":6,"22":0,"23":6,"24":6,"25":0,"26":6,"27":0,"28":6,"29":6,"30":0,"31":6,"32":0,"33":6,"34":6,"35":6,"36":6,"37":6,"38":6,"39":6,"40":6,"41":6,"42":6,"43":2,"44":4,"45":1,"46":4,"47":0,"48":4,"49":4,"50":1},"f":{"0":1,"1":6,"2":4},"b":{"0":[1,1,1],"1":[0,1],"2":[1,1],"3":[0,6],"4":[0,6],"5":[0,6],"6":[0,6],"7":[0,6],"8":[0,6],"9":[0,6],"10":[6,0],"11":[0,6],"12":[6,6],"13":[3,3],"14":[3,3],"15":[3,3],"16":[2,4],"17":[0,4],"18":[4,0]},"inputSourceMap":{"version":3,"file":"/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/OptionInfo.ts","sources":["/Users/matthewblack/code/github.com/AtomicFinance/node-dlc/packages/core/lib/dlc/finance/OptionInfo.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n  ContractDescriptorV1,\n  ContractInfo,\n  ContractInfoV0,\n  DigitDecompositionEventDescriptorV0,\n  HyperbolaPayoutCurvePiece,\n  MessageType,\n  PayoutFunctionV0,\n} from '@node-dlc/messaging';\nimport BN from 'bignumber.js';\n\nimport { HyperbolaPayoutCurve } from '../HyperbolaPayoutCurve';\nimport { CoveredCall } from './CoveredCall';\nimport { ShortPut } from './ShortPut';\n\nexport interface OptionInfo {\n  contractSize: bigint;\n  strikePrice: bigint;\n  premium?: bigint;\n  type?: OptionType;\n  expiry: Date;\n}\n\nexport type HasOfferCollateralSatoshis = {\n  offerCollateralSatoshis: bigint;\n};\n\nexport type HasContractInfo = {\n  contractInfo: ContractInfo;\n};\n\nexport type HasType = {\n  type: MessageType;\n};\n\nexport type OptionType = 'put' | 'call';\n\nexport function getOptionInfoFromContractInfo(\n  _contractInfo: ContractInfo,\n): OptionInfo {\n  if (_contractInfo.type !== MessageType.ContractInfoV0)\n    throw Error('Only ContractInfoV0 currently supported');\n\n  const contractInfo = _contractInfo as ContractInfoV0;\n  if (contractInfo.contractDescriptor.type !== MessageType.ContractDescriptorV1)\n    throw Error('Only ContractDescriptorV1 currently supported');\n\n  const oracleInfo = contractInfo.oracleInfo;\n  const { eventMaturityEpoch } = oracleInfo.announcement.oracleEvent;\n\n  const eventDescriptor = oracleInfo.announcement.oracleEvent\n    .eventDescriptor as DigitDecompositionEventDescriptorV0;\n  const { base: oracleBase, nbDigits: oracleDigits } = eventDescriptor;\n  if (\n    oracleInfo.announcement.oracleEvent.eventDescriptor.type !==\n    MessageType.DigitDecompositionEventDescriptorV0\n  )\n    throw Error('Only DigitDecompositionEventDescriptorV0 currently supported');\n\n  const contractDescriptor = contractInfo.contractDescriptor as ContractDescriptorV1;\n  if (contractDescriptor.payoutFunction.type !== MessageType.PayoutFunctionV0)\n    throw Error('Only PayoutFunctionV0 currently supported');\n\n  const payoutFunction = contractDescriptor.payoutFunction as PayoutFunctionV0;\n  if (payoutFunction.pieces.length === 0)\n    throw Error('PayoutFunction must have at least once PayoutCurvePiece');\n  if (payoutFunction.pieces.length > 1)\n    throw Error('More than one PayoutCurvePiece not supported');\n\n  const payoutCurvePiece = payoutFunction.pieces[0]\n    .payoutCurvePiece as HyperbolaPayoutCurvePiece;\n  if (\n    payoutCurvePiece.type !== MessageType.HyperbolaPayoutCurvePiece &&\n    payoutCurvePiece.type !== MessageType.OldHyperbolaPayoutCurvePiece\n  )\n    throw Error('Must be HyperbolaPayoutCurvePiece');\n  if (payoutCurvePiece.b !== BigInt(0) || payoutCurvePiece.c !== BigInt(0))\n    throw Error('b and c HyperbolaPayoutCurvePiece values must be 0');\n\n  const curve = HyperbolaPayoutCurve.fromPayoutCurvePiece(payoutCurvePiece);\n  const maxOutcome = BigInt(\n    new BN(oracleBase).pow(oracleDigits).minus(1).toString(10),\n  );\n  const isAscending = curve\n    .getPayout(maxOutcome)\n    .gt(Number(payoutFunction.endpointPayout0));\n\n  const expiry = new Date(eventMaturityEpoch * 1000);\n  const totalCollateral = contractInfo.totalCollateral;\n\n  // if curve is ascending, assume it is a put.\n  const contractSize = isAscending\n    ? payoutCurvePiece.translatePayout - totalCollateral\n    : totalCollateral + payoutCurvePiece.translatePayout;\n\n  const strikePrice = payoutCurvePiece.d / contractSize;\n\n  // rebuild payout curve from option info and perform a sanity check\n  const { payoutCurve: sanityCurve } = isAscending\n    ? ShortPut.buildCurve(\n        strikePrice,\n        contractSize,\n        totalCollateral,\n        oracleBase,\n        oracleDigits,\n      )\n    : CoveredCall.buildCurve(\n        strikePrice,\n        contractSize,\n        oracleBase,\n        oracleDigits,\n      );\n  const type = isAscending ? 'put' : 'call';\n\n  if (!curve.equals(sanityCurve))\n    throw new Error(\n      'Payout curve built from extracted OptionInfo does not match original payout curve',\n    );\n\n  return { contractSize, strikePrice, expiry, type };\n}\n\nexport function getOptionInfoFromOffer(\n  offer: HasOfferCollateralSatoshis & HasContractInfo & HasType,\n): OptionInfo {\n  if (\n    offer.type !== MessageType.DlcOfferV0 &&\n    offer.type !== MessageType.OrderOfferV0\n  )\n    throw Error('Only DlcOfferV0 and OrderOfferV0 currently supported');\n\n  const premium =\n    offer.contractInfo.totalCollateral - offer.offerCollateralSatoshis;\n\n  return {\n    ...getOptionInfoFromContractInfo(offer.contractInfo),\n    premium,\n  };\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"ca79ca92137909d2826047ba99649a7662e15e75","contentHash":"85c9ab03f0829c25628e9b7081cbdd310e22a7a07b0e78e771c59abbacc54122"}}