SUMMARY | |
---|---|
FULL NAME | Fixed Payout Contract V4 |
STATUS | Inactive |
TRANSACTIONS | 0 |
LAST ACTIVATION BLOCK | 740,135 |
BALANCES |
---|
ASSET | AMOUNT |
---|---|
ZP 00 | 73,260.2182622 |
CSXBear3400 00000000f36a67070b18d8ba6ad57c7abaf4add463c4c2d38346724edc85bfef03de66bc5c7671950e194f0f5d1b73faf96d418ebc8ea83d0866fe1cff9e037856093ec7 | 2 |
AAPLBull38500 00000000f36a67070b18d8ba6ad57c7abaf4add463c4c2d38346724edc85bfef03de66bc58ee572fb02f19237d0f7a1d5350af0d564660f3555cb345f828f89baab39641 | 1 |
AAPLBull11700 0000000062c2fc4b5c705a9afcfe90fdb8fca6fa34ac805f92f44beeeb3fd8a65c32f4b200741f70b7a0e492982df5c2fff6c056f58c0ffdc9e4f769a570cf45c9a4c6f3 | 1 |
00a515...c3c130 00000000a515de480812021d184014dc43124254ddc6b994331bc8abe5fbd6c04bc3c130 | 1 |
CATBear33000 00000000f36a67070b18d8ba6ad57c7abaf4add463c4c2d38346724edc85bfef03de66bc0506990b3394b175c0914a9f17f8cb42e21b4f1fb1c6c514d99b66d2223b5863 | 1 |
ABCBear11937 00000000f36a67070b18d8ba6ad57c7abaf4add463c4c2d38346724edc85bfef03de66bc765fa2063989934418916a55c5219457b9ffc4f8988a528f6e1bbe2092deadf8 | 1 |
WMTBear50 00000000f36a67070b18d8ba6ad57c7abaf4add463c4c2d38346724edc85bfef03de66bcfcb63d29ea9dd27b6dfb83171e128b530801d8ecc12890478cc73075aae2e2ee | 0.5 |
00ea04...e671d8 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe348dc53a30d3411dac3688044d2ded48e9cdf92defcebb9badefa7f714ae671d8 | 0.00000006 |
00ea04...be3a3e 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe37083c0b6481a16759dbeee00825c141bed44df81548675e7599ab81506be3a3e | 0.00000005 |
00ea04...d0b5f0 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3095567389cbec3886cd6e169ec392c1f555fa7322c00f01eccbb29a6efd0b5f0 | 0.00000004 |
00ea04...24b6fa 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3c8761175df855672df9c1a0cd0590b705564d6a11e375496edfc1dbc2d24b6fa | 0.00000003 |
00ea04...0e0867 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3ad281a094604ac8545ada88bb48316de70b93a9ed962cf680d907ca6ed0e0867 | 0.00000003 |
00ea04...2e4f94 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe350d6897b8e4d544e304290e301fb4451b2105328529c9e1946fc7513db2e4f94 | 0.00000003 |
00ea04...3467ae 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe33a4a5d4051bbbd2ea2760b765a43f0304dbbef21e7d532447f607490eb3467ae | 0.00000002 |
00ea04...c3e440 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe32cf3d9e078bed0bbfca24043b7b43b831f7b4c3f64446795f2c26c9f4ec3e440 | 0.00000002 |
00ea04...08747f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3204db2fdecd57c047800d4cb998a779ea3b5e170b001caa7ed103c5f5708747f | 0.00000002 |
00ea04...e8a1d6 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3d3f0738f6c4ecf5c6ffb89aa72749c0f07454ce4e2f235b5d0176754d9e8a1d6 | 0.00000002 |
00ea04...2b7c6f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe34ed2858243bac5b90c8d71a9b7bcef1dc6f0f9eade8215e69b70fe86842b7c6f | 0.00000002 |
00ea04...7332e0 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3fe4e429fcebb7274bf5e844d92e965378b4f0d6a6e5cb6a740da213a297332e0 | 0.00000002 |
00ea04...af9a52 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3014ab1735a588759ad47e0f453f732274d5c4ff9f7d2fd50c40ae0162baf9a52 | 0.00000002 |
00ea04...677044 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe30da886012ccf2992b722c1bc7b3ffeced4c3d2726a15a24ea5d911dd1f677044 | 0.00000002 |
00ea04...be368d 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3dd8bec61b303d2431726e205b0d255e2cbd657bafa238b07f469ab1d55be368d | 0.00000001 |
00ea04...c02347 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a9a17e3a9d2c20f846e9491919ff7f12fa7ead9cba24aa35eea8a15bb7c02347 | 0.00000001 |
00ea04...e79ae3 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35be2eb8892042db48116a3c91cf9508550d8fe12fdf1f5b9ec8b28800ee79ae3 | 0.00000001 |
00ea04...745a83 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3126a7873ea5734f553b512bbaa6a5f228454cec15d72d341be89f1e9eb745a83 | 0.00000001 |
00ea04...2644be 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe367dd4c58affe69100eebe4796cf612b94b4fa694570578e9f979c6a20f2644be | 0.00000001 |
00ea04...eacff5 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe36d29139203399ccbe8f05fc2e2e6e7b2c306d6c312e57feac1abdfa397eacff5 | 0.00000001 |
00ea04...45ad82 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3535911de97bd644e33cddc53b8eec061aa4a4a12d2eb4406a03637627e45ad82 | 0.00000001 |
00ea04...16ebf8 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe38b9bd425b1fb17e0f8c843a5ae17cbf3c8d364c90f9520742200b9336a16ebf8 | 0.00000001 |
00ea04...cb1c23 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3370a90bf438c6512d4a353315671037cf8b098e9cb04af778f4684ff35cb1c23 | 0.00000001 |
00ea04...b0100f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe355a9579964bfe0731e58f36c13c2896d1dda6cc077c40d859ad9c77211b0100f | 0.00000001 |
00ea04...58dacc 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35a9f8843551f75e99fbe0321ede7306148b0873ef6a0ff163f27e2fedc58dacc | 0.00000001 |
00ea04...b541af 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe338776356f8c5ff4ed0b1ccfbd69131f9ec4a68c9abd62086586befb57eb541af | 0.00000001 |
00ea04...880f0f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3c1dae2c990576dde98d7876300a67544ee6e091c2cb6a1a7065b1c7a3b880f0f | 0.00000001 |
00ea04...430c3c 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe38498b6b90377b396688317cb3e03b947a265f59d6b21c66012985b04c1430c3c | 0.00000001 |
00ea04...322350 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a42b0ee0a6705677514cf04487345ffa1b8479b30bb53ae490cf5cdb12322350 | 0.00000001 |
00ea04...ddcde2 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35e650bf35e5cd4172afe503c2bec6177674f9b8a8083bc1a634f6bbad7ddcde2 | 0.00000001 |
00ea04...74f6e7 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe30cb2c89ff994370e58c7fd05b6cd6e8e370ab9dac7e3561ccd55719c5b74f6e7 | 0.00000001 |
00ea04...d435fa 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe31f3075f5877caaf18544fcb5cb7f52742eaab622e71cb62c0ddb936c4ad435fa | 0.00000001 |
00ea04...d84ee2 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a633472cb9c1ee964e51fbc9df58fb3ddbb5adb171ea62061931f5389bd84ee2 | 0.00000001 |
00ea04...2e2a84 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe34aff2e3a76768ecd1dd20bd92c7d4d36fbc1a1d58f28dcf855e7ced9602e2a84 | 0.00000001 |
00ea04...a133fc 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3e2bcf5b1e9c33959c014b02c0ff0035555009a66fd9f664eadfd14a74ea133fc | 0.00000001 |
00ea04...31553c 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a329539aee3dd21b79474d5fdbce38979a46d279f8ede9fa493554df4731553c | 0.00000001 |
00ea04...d8a648 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe367b05e8330fabeb1d9623a85610fa75a5cb194f08542978a30b8547b7bd8a648 | 0.00000001 |
00ea04...709931 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe30623f7708c9e73e40427f8784d68d87e39a432652fb3d180c5c90aea63709931 | 0.00000001 |
00ea04...ad560f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3c6284d23b72cb4a0647d65ee1f2d184fe113c3f9e88ab3032e545aaee3ad560f | 0.00000001 |
00ea04...43d578 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3eccad85594e58d528ca540072cf8658176ea18cf231c5fdaa2766566a243d578 | 0.00000001 |
00ea04...13835c 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3f3363c646484ee21c0f10da4986d999d40a86f3981258aff12d5c9ff7513835c | 0.00000001 |
00ea04...0d1ace 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3e1ffada365203277f488724c362f73928b8d9c88c0fa86ce98300288ea0d1ace | 0.00000001 |
00ea04...14a7fa 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35fd3978627cd23e2745bdc0c2610c3e07ddeee6aead23a036f046290ca14a7fa | 0.00000001 |
00ea04...c06e50 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe397ed233dcc69f85c272aa65578d1cccf9f168ac478913df8bdffebdd33c06e50 | 0.00000001 |
00ea04...65902a 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe38bc89f1095e96cb56d22dc3df81b022d7ea904ef92bf7e843f6f3e051665902a | 0.00000001 |
00ea04...6e52a9 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3e28f49b46c4bc024ff0b06686cf15dfc292f3a208316c8c1842105c6ea6e52a9 | 0.00000001 |
00ea04...b999a1 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe391cc4a8383684c19764fbdf9802ec30188d4384b4a8033b66c97bf49eeb999a1 | 0.00000001 |
00ea04...b72593 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3edb374bfa0dc47d74991ca81e044572f7758ec61bc3fe2a5a3696a119eb72593 | 0.00000001 |
00ea04...4edfe0 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe34fa9910e8303e65201d703b65173b05c8b03db62d7fcefe1fcddb6aaec4edfe0 | 0.00000001 |
00ea04...15d9b1 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe36886a078c6e126ed4c75b35f90bca88bd286ce96e5b2e40cbb6819fa7f15d9b1 | 0.00000001 |
00ea04...38c14f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3490ffdaba5858a3fa9e0a1e18b365ddcfa2641931b09a023b4d6ada75038c14f | 0.00000001 |
00ea04...f6f1d1 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe36c88e2d9f90a0f63c3903d4438de86e1b516bbf40213d360b44dfb3b2ef6f1d1 | 0.00000001 |
00ea04...12de83 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3ec512db1b225873a53bed344455acd4f6bec8cdc9bddcea9fbd2e41b6612de83 | 0.00000001 |
00ea04...219f6b 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe301b9dfc468c40b6446c2d433b3e9082ef0835e8b7c62932374e7c02eaa219f6b | 0.00000001 |
00ea04...7c024e 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35dea978aa318aad88feab94378c86fd6a7a8b48930f623d11ea4143fca7c024e | 0.00000001 |
00ea04...014ea5 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe399df2148e76e608383e604b3bf99fcd5cb1d8798df20a30f89d173f3cf014ea5 | 0.00000001 |
00ea04...810ca0 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe380efaec127009b8e35cb619c913027ec63af47fcedc45bbe438346d9d0810ca0 | 0.00000001 |
00ea04...65512c 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe34b9cb857a46adcfd9be2aac6ee1d68cd9e557b87f4075bb8880cbbc98565512c | 0.00000001 |
00ea04...6402f1 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3d9d537501f4474790d945fd34efe5095234e23225bba3a8130521610a86402f1 | 0.00000001 |
00ea04...fdc0ef 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe379f84c98da298eac2d6925a89b09d58a68c6bb42176c83e9702281c176fdc0ef | 0.00000001 |
00ea04...b0432e 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3f36dd773ba4e7e5e7f047a57b5c3c2dbe8c511d30ccb1543ab9c2e4bc1b0432e | 0.00000001 |
00ea04...fe95cc 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35572232dbce738643496a5006e3a7ebb764943edc19bcbf61c4afa85affe95cc | 0.00000001 |
00ea04...c0e784 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe30f78b0ad708974c2db3e6832738a7e63155c73089866e4210904426260c0e784 | 0.00000001 |
00ea04...e4f813 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe30bde506def1e0ce1afdf9849eeffaf769cf811bb916926de821694a627e4f813 | 0.00000001 |
00ea04...27c31f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe371a9b73cdab93d68826c24caa8cd4b547b3630025f00926cde61deafb827c31f | 0.00000001 |
00ea04...4bd5ce 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a2bb661d79bdb797e142e706c9f5b1658ad37b6d63a6efaa0cae68fb124bd5ce | 0.00000001 |
00ea04...fcc41d 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe36aceed9773ddc04a5269b9af5531372a455609d82de609631e7b7723c1fcc41d | 0.00000001 |
00ea04...5a44cb 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe365af41c5b0a2591f0f9ebb501eddd8d0794600835764bcd8ee5c2a38345a44cb | 0.00000001 |
00ea04...280972 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a1971ea6dda9de61d8fc76033a31f01697398f619b50e1a5d8d45a6536280972 | 0.00000001 |
00ea04...498ad3 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe39c384f15605c2282fa3f1c73cc913217cb5a902b199d6827f7bd8fdc87498ad3 | 0.00000001 |
00ea04...c8e0b6 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3955541d91438177c1631b8050b9eb22bfdd832648c42eaf8a2409a3d58c8e0b6 | 0.00000001 |
00ea04...1bfab1 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3f93f7c816d29ed0fdefe2d29630a75f7f7ed671f7f10362633df1d08f11bfab1 | 0.00000001 |
00ea04...38088a 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe38d7e5c7eaf994409c3eda0d9e528bd861bb6becf48cd17eae717a1f84638088a | 0.00000001 |
00ea04...9d474e 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3824961d28c72672c941c0eadff8637aa69445a9ff96da09f1fb9bb7ad09d474e | 0.00000001 |
00ea04...ed111f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe33035eb14339c2802369e7c7b0b09ace8899989d3d9e7bcd9cb2ec84c3ded111f | 0.00000001 |
00ea04...0cfcfe 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a43de53c5a9a8c61a0cba2c47ec54c4eb9cceeb6c508b3b6129122df960cfcfe | 0.00000001 |
00ea04...1e6e69 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3dfcc4c9eaad117ce31d641210c43661ad1c57416a76da7012cec2b3ae81e6e69 | 0.00000001 |
00ea04...f20682 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3dead152dbe74427727870d90fc224fd074e1b0cc314a34557e1a3c9a9ef20682 | 0.00000001 |
00ea04...f031b0 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3f270afea826c7eccf53b08e253928794674992616aebe3c35e4e5470d5f031b0 | 0.00000001 |
00ea04...09f8e4 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3aa2652686c374223b0b2e1c0920573a322ddfcd68c2bbc1fc4722a44c709f8e4 | 0.00000001 |
00ea04...7a32fe 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3ae71fb5b049ac588e509d08bef52eb3b68997ec4371b1afaa42f6625007a32fe | 0.00000001 |
00ea04...d5cc68 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe397900df4895f16fa0e416e14e9771c563e5896020da45ac1185b62c8a7d5cc68 | 0.00000001 |
00ea04...0435cf 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3788497ee922d172b6cf6eeb1f89f81abfe4a8d76f0067e1976aae9207e0435cf | 0.00000001 |
00ea04...aca21e 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3ddca3c7e1cfd56fb08577304eaa22f268352ee926dd76b122a41aa3c55aca21e | 0.00000001 |
00ea04...5d2801 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3aaf60b588f9696985bbe0fda4d8a27dc2e91f6c9e456a9f6daed904bab5d2801 | 0.00000001 |
00ea04...fa2db0 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3be48103968030ad60f4e27801bbb7639f22507576f3a0d730c1d84820cfa2db0 | 0.00000001 |
00ea04...f01543 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3c307070e3d23b3fe1b54c01f076414b90ca3cc64b1d3094b9121364da6f01543 | 0.00000001 |
00ea04...c3eeb9 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe32bff0289257cc0c9c6a1ad41722504771921059f0ab3bb6855a4a8f60fc3eeb9 | 0.00000001 |
00ea04...f1df7d 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe30eaf5ab43021bed9f20028c4eb6f13ea11021a2943182a210a946a4b0bf1df7d | 0.00000001 |
00ea04...749959 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe36c88602f65bd69d30f1b55b5e66d71a94273f711ed709035f02e558ecd749959 | 0.00000001 |
00ea04...eb81a7 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe33a11d111456546013a2ff38eb5f5dfa534b79270055c15857317041dfceb81a7 | 0.00000001 |
00ea04...865d94 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe32045ef7272584d7424064f1a2722dec83446b68fcdbb85ffdddf7386aa865d94 | 0.00000001 |
00ea04...745944 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe36c2ffe0ae928709278afd4050b6ce76c8516a72ddc2f37ae678dcc279e745944 | 0.00000001 |
00ea04...772172 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe33d7935d9e0e8d3e2b8593667d02462394f009a5b489e1be6e9724810df772172 | 0.00000001 |
00ea04...5a0a1f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3c84740c55f7708900f033386d5f5c7d68ce089335a44d99f5d8b720c4b5a0a1f | 0.00000001 |
00ea04...de6c75 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe34e2d8ff0a7cc83194784c7ccd717cf4837dea13d1d875c80540ad15423de6c75 | 0.00000001 |
00ea04...660b81 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe34cdbf78d94abbb19c89bafa70845aaea0a6a04159c109017eb39b408b4660b81 | 0.00000001 |
00ea04...5d0e66 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35dc3310c8b385a732491987159f07e8b3051f9ffb735c720d643ce3dc95d0e66 | 0.00000001 |
00ea04...9e9875 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3462917388edebc3b3d0300b8f605bfc505b18c11c7b3a1b14251789c1f9e9875 | 0.00000001 |
00ea04...b12b96 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3fb8a84bf228663730b26f60bf0aeb94c4fc901a82879e2fbdc66668d61b12b96 | 0.00000001 |
00ea04...5b7930 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe317f21783d33f8ff08f42dc8eda8f19a78eeba33aee84f274ef9a11e39a5b7930 | 0.00000001 |
00ea04...3efd5f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe368cf79ce3ed3f8940bbaa6838ef2ef9cde7e615dd5a436f7ecc0c7b02c3efd5f | 0.00000001 |
00ea04...aff6e2 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3637214aacefff7440d2558a01da19e44dd483bfe85cc35a7402805cf7aaff6e2 | 0.00000001 |
00ea04...a3b9d3 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3ccd432e8b05b9d08f6810cad806dae15bcd91c24ff748b713e28544410a3b9d3 | 0.00000001 |
00ea04...8eec6a 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe30236bf7d1090c25b35d1c3e836cb3ec572dc85bc1fd41650d39187b7838eec6a | 0.00000001 |
00ea04...6c96a3 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe38146046e330b046c475f88c6e7d08fba2c8ea8fca31a520c1c19850c606c96a3 | 0.00000001 |
00ea04...395e3e 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe353eb2b5a1bc2531737162d3b761723855d732cd7dc10695683985e26de395e3e | 0.00000001 |
00ea04...878c01 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a6e148f634d8962ad63b0ebcce4fcfbb58f2198ed70be266f1b81737a2878c01 | 0.00000001 |
00ea04...eb6f29 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe31b013b45302c5b9ad4bce28ae3173f15fec2e94c2a23acee0215ff3151eb6f29 | 0.00000001 |
00ea04...6fa341 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3ebf107adef3b245fee2184957cce3870f76c28cc2cc0b5b31e8f0b41946fa341 | 0.00000001 |
00ea04...208327 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe33e1b7dffcf413999c7b62875a8289e7e0adbf89ed181f6f586f1c62c3f208327 | 0.00000001 |
00ea04...59b447 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe38efefb37a57a3b31b8fae19b66288ecbb61aa0594e39056d9d2d05147959b447 | 0.00000001 |
00ea04...f663d6 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe31068fde14dff7bf021847583ef5d4193edc50b1e5adb5bfd62e7c920eff663d6 | 0.00000001 |
065ee3...933d70 00000000065ee39e9f6af7d6e185f5b72eace28cc48bba05969742f0f9066519f34523699eb4045f3da361b92faeb33bbbddc0e77bd9cd6cd4ba81d7c34c55fb25933d70 | 0.00000001 |
00ea04...38cc89 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3f384aecfef187c1dcf57307cf31c50908a693067d924d3235fcb463b4d38cc89 | 0.00000001 |
00ea04...d66d2d 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe381d05b8f9f418140d0391ebc4112a4418cf0ac9abf256556bc0091ed53d66d2d | 0.00000001 |
00ea04...4e8ded 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35b3599af0cc83d7cf307bfcb9d79172baef904c654fb0f85bfbbbf3da84e8ded | 0.00000001 |
00ea04...8bc88b 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3e4cd29cfec84a8b5a2a1b9a71b610465f22dde0d279d616156bfbd27438bc88b | 0.00000001 |
00ea04...15c869 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe34f03ca96506a38fe7c039c5b3301650fff7a432a0730e67a91fa7bab7215c869 | 0.00000001 |
00ea04...2ffe52 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe362e0c6c8e126bf62e64ddd34054fc6fe21bf7eaec3392f4ffde546a7b42ffe52 | 0.00000001 |
00ea04...bb71bb 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe33434cd134a10fcdb0b0f37ae6875de5a22a0314399a728ee1759ec1320bb71bb | 0.00000001 |
00ea04...291725 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35ad6071e3fbff98f6f8edd85f4862d6114e65261fe5100ea2c66c14af5291725 | 0.00000001 |
00ea04...a427a3 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe39e2e7dce31b6f206091aa89f8fb18b1a3f4f214f85790ded0bf212a59aa427a3 | 0.00000001 |
00ea04...577746 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35c0f5b37ee4088f9b15287a3476961103713dd8c258578be07bac153b6577746 | 0.00000001 |
00ea04...2fde79 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe391a5bc5f8f90bf42c48bfc291a3697954b26ee88cd98ebc05684ee5fa12fde79 | 0.00000001 |
00ea04...b0063c 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe34f4e1321aa2b8ecfb6715b8130b3cb877a5bab84b3e73b758c9c6e22f2b0063c | 0.00000001 |
00ea04...ebe377 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3c4828a43c763547847c3f8fb9226419c34b96bf040ad975547b3888f42ebe377 | 0.00000001 |
00ea04...751624 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35c26ac05547460a3899a2c836d289b4726c4be556ee54c16224badaef8751624 | 0.00000001 |
00ea04...c8ab28 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3c38e71141d9daf8f71dbf83e9805e36ded4a06971d0cfd68c581194801c8ab28 | 0.00000001 |
00ea04...ee5743 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe39a7250afa4dfeb611bd99f4bbca9ad62b0193e7f2c0a08125cb5535c68ee5743 | 0.00000001 |
00ea04...7d4c57 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe332b38c3ce5953d651da4f53c68b7442dbe295a5de3d057cb12b37d88f67d4c57 | 0.00000001 |
00ea04...0297dd 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe328938c09c03398ea1df78b99e9782db040b6ac89839ce0197cafeaf3e80297dd | 0.00000001 |
00ea04...53c195 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3f3f3c32e70879fade8ea87fa3574b213528709747968abc510353cb91053c195 | 0.00000001 |
00ea04...5c42fd 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe36978d71afc1f882ed458bca02ef92ee847537960d3a7af782a7e6265015c42fd | 0.00000001 |
00ea04...7b0c0b 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe359d199d4e9b0aedeaed2b5ad6443cc306e7696b4dd9a2b3af422acdc567b0c0b | 0.00000001 |
00ea04...58c966 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3dc8db03f611842df0ccba2a7a61d9ba5904746c2717d9674d26dc6c2ef58c966 | 0.00000001 |
00ea04...13d58f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3eebe871d019f45cc9707fb1698ff65a3e82dd2c0576d7d3402d87b817c13d58f | 0.00000001 |
00ea04...0a56ba 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe344e0b9d04619d546c686f66283d38e9b7c66a8ecfbdc22c0f14af999b20a56ba | 0.00000001 |
00ea04...079490 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3cd5c511cde7120a487d73ff62a322d00e7ba32ffcd6b5217e4c8dd1e96079490 | 0.00000001 |
00ea04...f65244 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3019252fc3befaf3b14db56636b15455b49890f9f279c5b0c08e300b318f65244 | 0.00000001 |
00ea04...c86eae 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe30ac715e2cb58b0fd121870bf491dc2b90d7c0a0b7ce475cfd685885177c86eae | 0.00000001 |
00ea04...447dbe 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe300da34725d28eebafd608d7fff100071a69cb1c6a5443e69efa590625f447dbe | 0.00000001 |
00ea04...5d58d4 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3c3343720cf35941f1bd6f80873869fa9f9d2edf799f42b0ca40f427dcf5d58d4 | 0.00000001 |
00ea04...d92392 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3f7e77fdaedc9e172ec36684765b0a9dc3df08a51e9806ee2c28cf8432bd92392 | 0.00000001 |
00ea04...185897 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3f712d6634ed0cf15ea1c12eb915761337638d0c45ed5bfe097b3103e1a185897 | 0.00000001 |
00ea04...c847d1 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3bf494d837db77a01ab1292ae130dbfc3671e246ef7dd348d3279dda1bec847d1 | 0.00000001 |
00ea04...36348f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe317f8052568e0cf2b4b49a25c4009be46d897c728d7c344add2e134400d36348f | 0.00000001 |
00ea04...ee06d8 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a2ca369b72d5832a3fc0b0d4b6d36667dba81189cf25ed06fa11b7b778ee06d8 | 0.00000001 |
00ea04...3e9527 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe304f31c2e10d26c9f1437ffdaca2b490813bd47fc06bb8bf957b694cb763e9527 | 0.00000001 |
00ea04...479f1d 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3931de704cb5d32634470dc595193bde284cca9563b225e6141094e35b7479f1d | 0.00000001 |
00ea04...ab9f91 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3acb39eb608ded03350407bcf1bfdb70fcddd989a041563525e3225fee9ab9f91 | 0.00000001 |
00ea04...749a2b 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe31c24c30a70380284a3ad1caf003e95e38d6b4e711881f0ceb887028309749a2b | 0.00000001 |
00ea04...d8300e 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3f4d832b80fde05479c5744be1edef5dbeb609880c7bdc3d24e7bd7ab05d8300e | 0.00000001 |
00ea04...2b6388 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe30934095e2f99e6bba8531ded664a222e4734199b3515a267db7505bbb92b6388 | 0.00000001 |
00ea04...0667de 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a2fc11574245300eb6460a465d45d549478e54b470d974953190388ae50667de | 0.00000001 |
00ea04...abd4da 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3b5cc83b31d11778c8926dba066d003cf0ea86cfcb6944261e5aca1fdfaabd4da | 0.00000001 |
00ea04...87d4fe 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe36e3f9f70c5f7d8b755cd53909e002de36ba216bdb1090f687f1ea7bcbe87d4fe | 0.00000001 |
00ea04...2f8094 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3d7681b6fb8977a29878fc9fb385a49ed54fb6a860e6ab67409dd03e9222f8094 | 0.00000001 |
00ea04...93fd0d 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3cdb049205304a5a2d97af6a431ee37702a809cb18b75f67561c407e2fe93fd0d | 0.00000001 |
00ea04...716b4f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe366b72e60d051ac1471b68d315bba767e7b9a2091423f9c3bc8d779319f716b4f | 0.00000001 |
00ea04...353415 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe30c903d941dc04b3624e70224b5b170bf46f5d3a523e171207c0116b465353415 | 0.00000001 |
00ea04...c5ce31 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3ee1b40c124276cca575078c594625512e2b37b9714d81642f1addf797ec5ce31 | 0.00000001 |
00ea04...ae6510 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3e2561a82d1766dc764251e4f8e52a20c2edc6851b036b6d636bee0915eae6510 | 0.00000001 |
00ea04...7f4b94 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3e96b1a1d5a8b8dc5bc3762175a770ea99bc7444f9b125fc6b2449828057f4b94 | 0.00000001 |
00ea04...d25a6f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe365088de6be255a3dc7e419fc703ab37526822f5c8205bd2913e15f2358d25a6f | 0.00000001 |
00ea04...d56491 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe311f69a8af4b0692a0cb9164b90ca393261050505e0d77ecc7030c2dd51d56491 | 0.00000001 |
00ea04...0084d9 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe347bc8ad94480b0e1d969923ab2e4918afc7dcd9b08863c175065c5d95d0084d9 | 0.00000001 |
00ea04...1417d3 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe31cbf2b15f7266ffc715cc35bf1c00a97e9fde8e0ad5095b94d947699521417d3 | 0.00000001 |
00ea04...411325 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe387f81b695e7d4910bca8eef1af9520c06c08ee866a0b0e296ef2ebbbf4411325 | 0.00000001 |
00ea04...9d082f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3b8edf47b069bc5e0b95018ea9ca3a36e85765e6e502423ca8e8e8dc28b9d082f | 0.00000001 |
00ea04...67353d 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe38097985bb328067c6f236d56170b02ee41b544a16958ccc5c4f2bb25c567353d | 0.00000001 |
00ea04...d493cd 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3a81c92101b6bfa7d22db91a1c0350838787098535853b0efbec64c0a2ad493cd | 0.00000001 |
00ea04...7d5d7e 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3984e87982f493395b4340a7502c2f26c68f532862ad0494db524dd97487d5d7e | 0.00000001 |
00ea04...3d78a8 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe35e1202829e1f023d51f38fb98dd8d31ca6635894945c83d551c1a94e713d78a8 | 0.00000001 |
00ea04...06375d 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe38ab9c94504b5e2f39758a11896912d545574596269612b94573bd0e78306375d | 0.00000001 |
00ea04...24e911 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3cf1cfd1828fa121f1e3630d21769686fcb0d5140bd6c398804a5f1c52424e911 | 0.00000001 |
00ea04...e41a56 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe33b6015b7eabc738278c7a3cdbeaef93bff51e95775b932d61079740eb2e41a56 | 0.00000001 |
00ea04...7718d9 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe33d079dbef0227078deab0b2f86985fe48fce63a7b4713d024fa22636b27718d9 | 0.00000001 |
00ea04...764fec 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe33dddd1026b17530bbb498cb82421b433089c54842eef354d16cae817c3764fec | 0.00000001 |
00ea04...4da594 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe357fc679149e9107cccfa6add8ae15b239cbe9c9f827239cf220a2a55db4da594 | 0.00000001 |
00ea04...885e3f 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe379d90076a02b573f4743949b650d6c738735e5b7f6172438f60514855a885e3f | 0.00000001 |
00ea04...c4c87e 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe3ab946550d36f36f51bb10f1386350d191532043257d7be43569e810521c4c87e | 0.00000001 |
00ea04...a296ea 00000000ea0491531b62de13d9760c6d9dd4046316080d1339daae5d2072811815c6bbe34b92ffbbc2677de242e1ba73495b79e7a7620389eb91913885c3e9254ca296ea | 0.00000001 |
open Zen.Base
open Zen.Cost
open Zen.Types
open Zen.Data
module U8 = FStar.UInt8
module U64 = FStar.UInt64
module RT = Zen.ResultT
module Dict = Zen.Dictionary
module Sha3 = Zen.Sha3
module TX = Zen.TxSkeleton
module CR = Zen.ContractResult
module Asset = Zen.Asset
module Opt = Zen.Option
module OptT = Zen.OptionT
module Array = Zen.Array
module Str = FStar.String
module CId = Zen.ContractId
module Merkle = Zen.MerkleTree
module W = Zen.Wallet
module PK = Zen.PublicKey
let auditPathMaxLength : nat = 30
type parser (a:Type) (m:nat) =
option (Dict.t data) -> result a `cost` m
type hashUpdate (a:Type) (m:nat) =
a -> Sha3.t -> Sha3.t `cost` m
type ticker =
s:string { Str.length s <= 4 }
type preAuditPath =
p: list data { length p <= auditPathMaxLength }
type auditPath =
p: list hash { length p <= auditPathMaxLength }
type commit = {
c_root : hash;
c_timestamp : timestamp;
}
type attestation = {
commit : commit;
pubKey : publicKey;
}
type position =
| Bull
| Bear
type betEvent = {
oraclePubKey : publicKey;
oracleContractId : contractId;
ticker : ticker;
price : U64.t;
start : U64.t;
expiry : option U64.t;
collateral : asset;
}
type bet = {
bevent : betEvent;
position : position;
}
type proof = {
key : ticker;
value : U64.t;
root : hash;
auditPath : auditPath;
index : U64.t;
}
type redemption = {
bet : bet;
attestation : attestation;
timestamp : timestamp;
proof : proof;
}
(*
-------------------------------------------------------------------------------
========== UTILITY FUNCTIONS ==================================================
-------------------------------------------------------------------------------
*)
let runOpt (#a #s:Type) (#m:nat) (update:a -> s -> s `cost` m) (x:option a) (st:s) : s `cost` (m + 5) =
Opt.maybe (incRet m) update x st
val lockToSender: asset -> U64.t -> sender -> txSkeleton -> result txSkeleton `cost` 624
let lockToSender asset amount sender txSkel = // 14
match sender with
| PK pk ->
ret txSkel
>>= TX.lockToPublicKey asset amount pk // 610
>>= RT.ok
| Contract cid ->
ret txSkel
>>= TX.lockToContract asset amount cid // 64
>>= RT.incOK 546
| Anonymous ->
RT.incFailw 610 "Sender can't be anonymous"
(*
-------------------------------------------------------------------------------
========== DATA PARSING =======================================================
-------------------------------------------------------------------------------
*)
val parseDict: option data -> result (option (Dict.t data)) `cost` 15
let parseDict data = // 11
match data with
| Some data ->
data
|> tryDict // 4
|> RT.ofOptionT "Data parsing failed - the message body isn't a dictionary"
|> RT.map Some
| None ->
RT.incFailw 4 "Data parsing failed - the message body is empty"
val parseField (#a:Type) (#m:nat)
: (data -> option a `cost` m)
-> fieldName:string
-> errMsg:string
-> option (Dict.t data)
-> result a `cost` (m + 75)
let parseField #_ #_ parser fieldName errMsg dict = // 11
let! value = dict >!= Dict.tryFind fieldName >?= parser in // (m + 64)
match value with
| Some value ->
RT.ok value
| None ->
RT.failw errMsg
val parseOptField (#a:Type) (#m:nat)
: (data -> option a `cost` m)
-> fieldName:string
-> option (Dict.t data)
-> result (option a) `cost` (m + 71)
let parseOptField #_ #_ parser fieldName dict = // 7
dict
>!= Dict.tryFind fieldName // 64
>?= parser // m
>>= RT.ok
val parseTicker: string -> string -> option (Dict.t data) -> result ticker `cost` 90
let parseTicker fieldName errMsg dict = // 6
let open RT in
parseField tryString fieldName errMsg dict >>= // 77
begin fun s -> // 7
if Str.length s <= 4
then RT.ok (s <: ticker)
else RT.failw "Ticker size can't be bigger than 4"
end
val extractHashes: string -> ls:list data -> result (ls':list hash { length ls' == length ls }) `cost` (length ls * (2 + 20) + 20 + 5)
let extractHashes errMsg ls = // 5
OptT.tryMapT tryHash ls // (length ls * 22 + 20)
|> RT.ofOptionT errMsg
val extractAuditPath': ls:preAuditPath -> result auditPath `cost` (length ls * 22 + 29)
let extractAuditPath' ls = // 4
let open RT in
extractHashes "All the items in the audit path must be hashes" ls // = X * 22 + 25
gt; (fun xs -> let (xs:list hash { length xs <= auditPathMaxLength }) = xs in xs)
val extractAuditPath: ls:preAuditPath
-> result auditPath `cost` (auditPathMaxLength * 22 + 40)
let extractAuditPath (ls:preAuditPath) =
extractAuditPath' ls
|> inc ((auditPathMaxLength - length ls) * 22)
|> (fun x -> x <: result auditPath `cost` (auditPathMaxLength * 22 + 29))
val parsePreAuditPath: string -> string -> option (Dict.t data) -> result preAuditPath `cost` 92
let parsePreAuditPath fieldName errMsg dict = // 6
let open RT in
parseField tryList fieldName errMsg dict >>= // 79
begin fun ls -> // 7
if length ls <= auditPathMaxLength
then RT.ok (ls <: preAuditPath)
else RT.failw "AuditPath length must be 256"
end
val parseAuditPath: string -> string -> option (Dict.t data)
-> result auditPath `cost` (auditPathMaxLength * 22 + 139)
let parseAuditPath fieldName errMsg dict = // 7
let open RT in
ret dict
>>= parsePreAuditPath fieldName errMsg // 92
>>= extractAuditPath // (length ls * 22 + 25 + (auditPathMaxLength - length ls) * 22 + 12)
val parsePosition: string -> string -> option (Dict.t data) -> result position `cost` 87
let parsePosition fieldName errMsg dict = // 6
let open RT in
parseField tryString fieldName errMsg dict >>= // 77
begin fun s -> match s with // 4
| "Bull" -> ret Bull
| "Bear" -> ret Bear
| _ -> RT.failw "Position must be either Bull or Bear"
end
val parseContractId: string -> string -> option (Dict.t data) -> result contractId `cost` 158
let parseContractId fieldName errMsg dict = // 6
let open RT in
parseField tryString fieldName errMsg dict >>= // 77
begin fun s -> // 11
if Str.length s = 72
then
let (s:string { Str.length s = 72 }) = s in
s
|> CId.parse // 64
|> RT.ofOptionT "The given OracleContractId is not a valid contractId"
else
RT.incFailw 64 "OracleContractId must be 72 characters long"
end
val parseAsset: string -> string -> option (Dict.t data) -> result asset `cost` 150
let parseAsset fieldName errMsg dict = // 5
let open RT in
parseField tryString fieldName errMsg dict >>= // 73
begin
Asset.parse // 64
>> RT.ofOptionT "The given asset is not a valid asset"
end
val getTimestamp : parser U64.t 82
val getRoot : parser hash 82
val getOraclePubKey : parser publicKey 82
val getTicker : parser ticker 94
val getPrice : parser U64.t 82
val getStart : parser U64.t 82
val getExpiry : parser (option U64.t) 77
val getAuditPath : parser auditPath (auditPathMaxLength * 22 + 139 + 4)
val getValue : parser U64.t 82
val getIndex : parser U64.t 82
val getPosition : parser position 91
val getOracleContractId : parser contractId 162
val getCollateral : parser asset 154
let getTimestamp dict = dict |>
parseField tryU64 "Timestamp" "Could not parse Timestamp"
let getRoot dict = dict |>
parseField tryHash "Root" "Could not parse Root"
let getOraclePubKey dict = dict |>
parseField tryPublicKey "OraclePubKey" "Could not parse OraclePubKey"
let getTicker dict = dict |>
parseTicker "Ticker" "Could not parse Ticker"
let getPrice dict = dict |>
parseField tryU64 "Price" "Could not parse Price"
let getStart dict = dict |>
parseField tryU64 "Start" "Could not parse Start"
let getExpiry dict = dict |>
parseOptField tryU64 "Expiry"
let getAuditPath dict = dict |>
parseAuditPath "AuditPath" "Could not parse AuditPath"
let getValue dict = dict |>
parseField tryU64 "Value" "Could not parse Value"
let getIndex dict = dict |>
parseField tryU64 "Index" "Could not parse Index"
let getPosition dict = dict |>
parsePosition "Position" "Could not parse Position"
let getOracleContractId dict = dict |>
parseContractId "OracleContractId" "Could not parse OracleContractId"
let getCollateral dict = dict |>
parseAsset "Collateral" "Could not parse Collateral"
val parseProof': option (Dict.t data)
-> result proof `cost` (94 + (auditPathMaxLength * 22 + 415))
let parseProof' dict = // 31
let open RT in
dict |> getTicker >>= (fun key -> // 94
dict |> getValue >>= (fun value -> // 82
dict |> getRoot >>= (fun root -> // 82
dict |> getAuditPath >>= (fun auditPath -> // auditPathMaxLength * 22 + 139 + 4
dict |> getIndex >>= (fun index -> // 82
RT.ok ({
key = key;
value = value;
root = root;
auditPath = auditPath;
index = index;
}))))))
val parseProof: option (Dict.t data)
-> result proof `cost` (auditPathMaxLength * 22 + 512)
let parseProof dict =
parseProof' dict
|> (fun x -> x <: result proof `cost` (auditPathMaxLength * 22 + 509))
val parseCommit: option (Dict.t data) -> result commit `cost` 175
let parseCommit dict = // 11
let open RT in
dict |> getRoot >>= (fun root -> // 82
dict |> getTimestamp >>= (fun timestamp -> // 82
RT.ok ({
c_root = root;
c_timestamp = timestamp;
})))
val parseAttestation: option (Dict.t data) -> result attestation `cost` 268
let parseAttestation dict = // 11
let open RT in
dict |> parseCommit >>= (fun commit -> // 175
dict |> getOraclePubKey >>= (fun pubKey -> // 82
RT.ok ({
commit = commit;
pubKey = pubKey;
})))
val parseEvent: option (Dict.t data) -> result betEvent `cost` 769
let parseEvent dict = // 36
let open RT in
dict |> getOraclePubKey >>= (fun oraclePubKey -> // 82
dict |> getOracleContractId >>= (fun oracleContractId -> // 162
dict |> getTicker >>= (fun ticker -> // 94
dict |> getPrice >>= (fun price -> // 82
dict |> getStart >>= (fun start -> // 82
dict |> getExpiry >>= (fun expiry -> // 77
dict |> getCollateral >>= (fun collateral -> // 154
RT.ok ({
oraclePubKey = oraclePubKey;
oracleContractId = oracleContractId;
ticker = ticker;
price = price ;
start = start;
expiry = expiry;
collateral = collateral;
}))))))))
val parseRedemption': option (Dict.t data) -> result redemption `cost` (1051 + (auditPathMaxLength * 22 + 698))
let parseRedemption' dict = // 22
let open RT in
dict |> parseEvent >>= (fun bevent -> // 769
dict |> getPosition >>= (fun position -> // 91
dict |> parseAttestation >>= (fun attestation -> // 262
dict |> getTimestamp >>= (fun timestamp -> // 82
dict |> parseProof >>= (fun proof -> // (auditPathMaxLength * 22 + 512)
RT.ok ({
bet = {
bevent = bevent;
position = position;
};
attestation = attestation;
timestamp = timestamp;
proof = proof;
}))))))
val parseRedemption: option (Dict.t data) -> result redemption `cost` (auditPathMaxLength * 22 + 1752)
let parseRedemption dict = // 3
parseRedemption' dict
|> (fun x -> x <: result redemption `cost` (auditPathMaxLength * 22 + 1749))
(*
-------------------------------------------------------------------------------
========== TOKENIZATION =======================================================
-------------------------------------------------------------------------------
*)
val updatePublicKey : hashUpdate publicKey 517
let updatePublicKey pk s = // 7
let! cpk = PK.compress pk in // 305
ret s
>>= Sha3.updateCPK cpk // 205
// Sha3.updateString with a constant cost
val updateTicker : hashUpdate ticker 36
let updateTicker tick s = // 12
ret s
>>= Sha3.updateString tick // (6 * Str.length tick)
>>= incRet (6 * (4 - Str.length tick))
val updateEvent : hashUpdate betEvent 1339
let updateEvent bevent s = // 30
ret s
>>= updatePublicKey bevent.oraclePubKey // 517
>>= Sha3.updateContractId bevent.oracleContractId // 223
>>= updateTicker bevent.ticker // 36
>>= Sha3.updateU64 bevent.price // 48
>>= Sha3.updateU64 bevent.start // 48
>>= Sha3.updateU64 `runOpt` bevent.expiry // 53
>>= Sha3.updateAsset bevent.collateral // 384
val updatePosition : hashUpdate position 28
let updatePosition position s = // 4
match position with
| Bull -> Sha3.updateString "Bull" s // 24
| Bear -> Sha3.updateString "Bear" s // 24
val hashCommit : commit -> hash `cost` 271
let hashCommit commit = // 11
ret Sha3.empty
>>= Sha3.updateHash commit.c_root // 192
>>= Sha3.updateU64 commit.c_timestamp // 48
>>= Sha3.finalize // 20
val hashCommitment : attestation -> hash `cost` 1014
let hashCommitment attestation = // 14
let! commitHash = hashCommit attestation.commit in // 271
ret Sha3.empty
>>= Sha3.updateHash commitHash // 192
>>= updatePublicKey attestation.pubKey // 517
>>= Sha3.finalize // 20
val hashAttestation : attestation -> hash `cost` 1235
let hashAttestation attestation = // 9
let! commit = hashCommitment attestation in // 1014
ret Sha3.empty
>>= Sha3.updateHash commit // 192
>>= Sha3.finalize // 20
val hashBet : bet -> hash `cost` 1398
let hashBet bet = // 11
ret Sha3.empty
>>= updateEvent bet.bevent // 1339
>>= updatePosition bet.position // 28
>>= Sha3.finalize // 20
val mkBetToken : contractId -> bet -> asset `cost` 1405
let mkBetToken (v, h) bet = // 7
let! betHash = hashBet bet in
ret (v, h, betHash)
val mkAttestToken : contractId -> attestation -> asset `cost` 1242
let mkAttestToken (v,h) attestation = // 7
let! attestHash = hashAttestation attestation in // 1235
ret (v, h, attestHash)
(*
-------------------------------------------------------------------------------
========== VALIDATION =========================================================
-------------------------------------------------------------------------------
*)
val inBounds : U64.t -> option U64.t -> U64.t -> bool `cost` 10
let inBounds low high value =
(low `U64.lte` value && Opt.maybe true (U64.lte value) high)
|> ret
val validateTime: redemption -> result redemption `cost` 24
let validateTime redemption = // 14
let bevent = redemption.bet.bevent in
let low = bevent.start in
let high = bevent.expiry in
let value = redemption.timestamp in
let! inb = inBounds low high value in // 10
if inb
then RT.ok redemption
else RT.failw "Attestation time is not within the given time bounds"
val validatePrice: redemption -> result redemption `cost` 17
let validatePrice redemption = // 17
let bevent = redemption.bet.bevent in
let price = bevent.price in
let value = redemption.proof.value in
let pos = redemption.bet.position in
match price `U64.lte` value, pos with
| true , Bull
| false, Bear ->
RT.ok redemption
| _ ->
RT.failw "Position doesn't match the event"
val hashLeaf : key:ticker -> U64.t -> hash `cost` 111
let hashLeaf (key : ticker) (value : U64.t) = // 19
ret Sha3.empty
>>= Sha3.updateString key // 6 * 4
>>= Sha3.updateU64 value // 48
>>= Sha3.finalize // 20
|> inc (24 - 6 * Str.length key)
|> (fun x -> x <: hash `cost` 92)
val verifyAuditPath' : proof:proof
-> bool `cost` (111 + (length proof.auditPath * 420 + 4 + (auditPathMaxLength * 420 - length proof.auditPath * 420)) + 25)
let verifyAuditPath' proof = // 14
let! leaf = hashLeaf proof.key proof.value in // 111
Merkle.verify proof.root proof.auditPath (U64.v proof.index) leaf // (length proof.auditPath * 420 + 4)
|> inc (auditPathMaxLength * 420 - length proof.auditPath * 420)
val verifyAuditPath : proof:proof -> bool `cost` (auditPathMaxLength * 420 + 143)
let verifyAuditPath proof = // 3
verifyAuditPath' proof
|> (fun x -> x <: bool `cost` (auditPathMaxLength * 420 + 140))
val validateAuditPath: redemption -> result redemption `cost` (auditPathMaxLength * 420 + 151)
let validateAuditPath redemption = // 8
let! b = verifyAuditPath redemption.proof in // (auditPathMaxLength * 420 + 143)
if b
then RT.ok redemption
else RT.failw "Invalid audit path"
val validateRedemption: redemption -> result redemption `cost` (auditPathMaxLength * 420 + 199)
let validateRedemption redemption = // 7
let open RT in
ret redemption
>>= validateTime // 24
>>= validatePrice // 17
>>= validateAuditPath // (auditPathMaxLength * 420 + 151)
(*
-------------------------------------------------------------------------------
========== COMMAND: Issue ====================================================
-------------------------------------------------------------------------------
*)
val issueEvent: txSkeleton -> contractId -> sender -> betEvent -> CR.t `cost` 4369
let issueEvent txSkel contractId sender bevent = // 52
let! bullToken = mkBetToken contractId ({ bevent=bevent; position=Bull }) in // 1405
let! bearToken = mkBetToken contractId ({ bevent=bevent; position=Bear }) in // 1405
let! m = TX.getAvailableTokens bevent.collateral txSkel in // 64
let open RT in
ret txSkel
>>= (TX.safeMint m bullToken >> ofOptionT "No collateral provided") // 64
>>= (TX.safeMint m bearToken >> ofOptionT "No collateral provided") // 64
>>= lockToSender bullToken m sender // 624
>>= lockToSender bearToken m sender // 624
>>= (TX.lockToContract bevent.collateral m contractId >> liftCost) // 64
>>= CR.ofTxSkel // 3
val issue: txSkeleton -> contractId -> sender -> option data -> CR.t `cost` 5163
let issue txSkel contractId sender dict = // 10
let open RT in
ret dict
>>= parseDict // 15
>>= parseEvent // 769
>>= issueEvent txSkel contractId sender // 4369
(*
-------------------------------------------------------------------------------
========== COMMAND: Redeem ====================================================
-------------------------------------------------------------------------------
*)
val redeemRedemption' :
(w:wallet)
-> txSkeleton
-> contractId
-> sender
-> redemption
-> CR.t `cost` (1405 + (1242 + (64 + (0 + 64 + (Zen.Wallet.size w * 128 + 192) + 624 + (Zen.Wallet.size w * 128 + 192) + 64 + 3))) + 62)
let redeemRedemption' w txSkel contractId sender redemption = // 62
let! betToken = mkBetToken contractId redemption.bet in // 1405
let oracleContractId = redemption.bet.bevent.oracleContractId in
let attestation = redemption.attestation in
let! attestToken = mkAttestToken oracleContractId attestation in // 1242
let! m = TX.getAvailableTokens betToken txSkel in // 64
let open RT in
ret txSkel
>>= (liftCost << TX.destroy m betToken) // 64
>>= (ofOptionT "Insufficient funds" << TX.fromWallet redemption.bet.bevent.collateral m contractId w) // W.size w * 128 + 192
>>= lockToSender redemption.bet.bevent.collateral m sender // 624
>>= (ofOptionT "Attestation token not found" << TX.fromWallet attestToken 1UL contractId w) // W.size wallet * 128 + 192
>>= (liftCost << TX.lockToContract attestToken 1UL contractId) // 64
>>= CR.ofTxSkel // 3
val redeemRedemption: (w:wallet) -> txSkeleton -> contractId -> sender -> redemption
-> CR.t `cost` (W.size w * 256 + 3919)
let redeemRedemption w txSkel contractId sender redemption = // 7
redeemRedemption' w txSkel contractId sender redemption
|> (fun x -> x <: CR.t `cost` (W.size w * 256 + 3912))
val redeem' :
(w:wallet)
-> txSkeleton
-> contractId
-> sender
-> option data
-> CR.t `cost` (0 + 15 + (auditPathMaxLength * 22 + 1752) + (auditPathMaxLength * 420 + 199) + (W.size w * 256 + 3919) + 13)
let redeem' w txSkel contractId sender dict = // 13
let open RT in
ret dict
>>= parseDict // 15
>>= parseRedemption // (auditPathMaxLength * 22 + 1752)
>>= validateRedemption // (auditPathMaxLength * 420 + 199)
>>= redeemRedemption w txSkel contractId sender // (W.size w * 256 + 3919)
val redeem: (w:wallet) -> txSkeleton -> contractId -> sender
-> option data -> CR.t `cost` (auditPathMaxLength * 442 + W.size w * 256 + 5905)
let redeem w txSkel contractId sender dict = // 7
redeem' w txSkel contractId sender dict
|> (fun x -> x <: CR.t `cost` (auditPathMaxLength * 442 + W.size w * 256 + 5898))
(*
-------------------------------------------------------------------------------
========== COMMAND: Cancel ====================================================
-------------------------------------------------------------------------------
*)
val cancelEqualTokens :
contractId
-> (w : wallet)
-> sender
-> U64.t
-> asset
-> asset
-> txSkeleton
-> betEvent
-> txSkeleton `RT.t` (0 + (W.size w * 128 + 192) + 624 + 64 + 64 + 29)
let cancelEqualTokens contractId w sender m bullToken bearToken txSkel bevent = // 29
let open RT in
ret txSkel
>>= (ofOptionT "Insufficient funds" << TX.fromWallet bevent.collateral m contractId w) // W.size w * 128 + 192
>>= lockToSender bevent.collateral m sender // 624
>>= (liftCost << TX.destroy m bullToken) // 64
>>= (liftCost << TX.destroy m bearToken) // 64
val cancelEvent':
(w : wallet)
-> contractId
-> sender
-> txSkeleton
-> betEvent
-> CR.t `cost` (1405 + (1405 + (64 + (64 + (0 + (W.size w * 128 + 192) + 624 + 64 + 64 + 29 + 3)))) + 45)
let cancelEvent' w contractId sender txSkel bevent = // 45
let! bullToken = mkBetToken contractId ({ bevent=bevent; position=Bull }) in // 1405
let! bearToken = mkBetToken contractId ({ bevent=bevent; position=Bear }) in // 1405
let! mBull = TX.getAvailableTokens bullToken txSkel in // 64
let! mBear = TX.getAvailableTokens bearToken txSkel in // 64
let open RT in
begin if U64.eq mBull mBear then
cancelEqualTokens contractId w sender mBull bullToken bearToken txSkel bevent // (0 + (W.size w * 128 + 192) + 624 + 64 + 64 + 29)
else
"There must be an equal amount of both bull and bear tokens in the transaction"
|> incFailw (0 + (W.size w * 128 + 192) + 624 + 64 + 64 + 29)
end
>>= CR.ofTxSkel // 3
val cancelEvent:
(w : wallet)
-> contractId
-> sender
-> txSkeleton
-> betEvent
-> CR.t `cost` (W.size w * 128 + 3966)
let cancelEvent w contractId sender txSkel bevent = // 7
cancelEvent' w contractId sender txSkel bevent
|> (fun x -> x <: CR.t `cost` (W.size w * 128 + 3959))
val cancel' :
(w : wallet)
-> contractId
-> sender
-> txSkeleton
-> option data
-> CR.t `cost` (0 + 15 + 769 + (W.size w * 128 + 3966) + 11)
let cancel' w contractId sender txSkel dict = // 11
let open RT in
ret dict
>>= parseDict // 15
>>= parseEvent // 769
>>= cancelEvent w contractId sender txSkel // (W.size w * 128 + 3966)
val cancel :
(w : wallet)
-> contractId
-> sender
-> txSkeleton
-> option data
-> CR.t `cost` (W.size w * 128 + 4768)
let cancel w contractId sender txSkel dict = // 7
cancel' w contractId sender txSkel dict
|> (fun x -> x <: CR.t `cost` (W.size w * 128 + 4761))
(*
-------------------------------------------------------------------------------
========== MAIN ===============================================================
-------------------------------------------------------------------------------
*)
val main:
txSkel : txSkeleton
-> context : context
-> contractId : contractId
-> command : string
-> sender : sender
-> messageBody : option data
-> w : wallet
-> state : option data
-> CR.t `cost` (
match command with
| "Issue" ->
5163 + 9
| "Redeem" ->
auditPathMaxLength * 442 + W.size w * 256 + 5905 + 9
| "Cancel" ->
W.size w * 128 + 4768 + 9
| _ ->
9)
let main txSkel context contractId command sender messageBody w state = // 9
match command with
| "Issue" ->
issue txSkel contractId sender messageBody // 5163
<: CR.t `cost` (
match command with
| "Issue" ->
5163
| "Redeem" ->
auditPathMaxLength * 442 + W.size w * 256 + 5905
| "Cancel" ->
W.size w * 128 + 4768
| _ ->
0)
| "Redeem" ->
redeem w txSkel contractId sender messageBody // auditPathMaxLength * 442 + W.size w * 256 + 5905
| "Cancel" ->
cancel w contractId sender txSkel messageBody // W.size w * 128 + 4768
| _ ->
RT.failw "Unsupported command"
val cf:
txSkel : txSkeleton
-> context : context
-> command : string
-> sender : sender
-> messageBody: option data
-> w : wallet
-> state : option data
-> nat `cost` 17
let cf _ _ command _ _ w _ =
((
match command with
| "Issue" ->
5163 + 9
| "Redeem" ->
auditPathMaxLength * 442 + W.size w * 256 + 5905 + 9
| "Cancel" ->
W.size w * 128 + 4768 + 9
| _ ->
9
) <: nat) |> ret