tx · EQVPsKZcHmA1Qcn2G67M57Ykway7mF1EREquAEnzWCrk 3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA: -0.01400000 Waves 2022.06.06 14:20 [3150009] smart account 3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA > SELF 0.00000000 Waves
{ "type": 13, "id": "EQVPsKZcHmA1Qcn2G67M57Ykway7mF1EREquAEnzWCrk", "fee": 1400000, "feeAssetId": null, "timestamp": 1654514438977, "version": 2, "chainId": 87, "sender": "3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA", "senderPublicKey": "3GtkwhnMmG1yeozW51o4dJ1x3BDToPaLBXyBWKGdAc2e", "proofs": [ "5M8UXkC5jtZbsJsXPUKWoTLrXf3x1z1Th1H8Va8zDBaZwm6BWP95TrhXK4sZpCpGE1uLdGhLAsPBWjcNzUVL1vtN" ], "script": "base64:AAIFAAAAAAAAAC0IAhIDCgEIEgASBAoCCAgSBAoCCAgSABIAEgMKAQgSAwoBCBIDCgEIEgMKAQgAAAApAAAAAApwZXJjaFByaWNlCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAPQkAAAAAABXNjYWxlAAAAAAAAACcQAAAAAAZzY2FsZTIAAAAAAAAPQkABAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAAlnZXRPcmFjbGUAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAADHRyeUdldFN0cmluZwAAAAECAAAAFHN0YXRpY19vcmFjbGVBZGRyZXNzAQAAAA1nZXRFZ2dBc3NldElkAAAAAAkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAARc3RhdGljX2VnZ0Fzc2V0SWQBAAAAE2dldEluY3ViYXRvckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzAQAAABFnZXRSZWJpcnRoQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAVc3RhdGljX3JlYmlydGhBZGRyZXNzAQAAABNnZXRTd29wUHJvbW9BZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfc3dvcFByb21vQWRkcmVzcwEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19icmVlZGVyQWRkcmVzcwEAAAAVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABlzdGF0aWNfcmVmQ29udHJhY3RBZGRyZXNzAQAAAA9nZXRJdGVtc0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAE3N0YXRpY19pdGVtc0FkZHJlc3MBAAAAEmdldE1ldGFyYWNlQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAWc3RhdGljX21ldGFSYWNlQWRkcmVzcwEAAAAUZ2V0QWNjQm9vc3RlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAGHN0YXRpY19hY2NCb29zdGVyQWRkcmVzcwEAAAATZ2V0VHJ1c3RlZENvbnRyYWN0cwAAAAAJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfdHJ1c3RlZENvbnRyYWN0cwEAAAAOZ2V0TWFpbnRlbmFuY2UAAAAACQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAASc3RhdGljX21haW50ZW5hbmNlAQAAABJnZXRDZk1hc3RlckFk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AAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAADW5vdCB2YWxpZCBORlQBAAAAHWdldExhc3RLbm93bkFzc2V0RmFybWluZ1Bvd2VyAAAAAgAAAAdhZGRyZXNzAAAAB2Fzc2V0SWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAHYXNzZXRJZAIAAAANX2Zhcm1pbmdQb3dlcgEAAAAOZ2V0QXNzZXRzQnlHZW4AAAABAAAAA2dlbgQAAAABcwkBAAAADHRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgIAAAAHYXNzZXRzXwUAAAADZ2VuAwkAAAAAAAACBQAAAAFzAgAAAAAFAAAAA25pbAkABLUAAAACBQAAAAFzAgAAAAEsAQAAAAxjYWxjSW50ZXJlc3QAAAADAAAAEHByZXZpb3VzSW50ZXJlc3QAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAAAABF0b3RhbEZhcm1pbmdQb3dlcgkAAGQAAAACBQAAABBwcmV2aW91c0ludGVyZXN0CQAAaQAAAAIJAABoAAAAAgkAAGgAAAACBQAAAAVzY2FsZQkBAAAAEWdldFJld2FyZFBlckJsb2NrAAAAAAkAAGUAAAACBQAAAAZoZWlnaHQFAAAAFnByZXZpb3VzSW50ZXJlc3RIZWlnaHQFAAAAEXRvdGFsRmFybWluZ1Bvd2VyAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAAAwkAAGYAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgAAAAAAAAAAAAQAAAAQcHJldmlvdXNJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABd0b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdAQAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAAB10b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdEhlaWdodAQAAAARdG90YWxGYXJtaW5nUG93ZXIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASdG90YWxfZmFybWluZ1Bvd2VyCQEAAAAMY2FsY0ludGVyZXN0AAAAAwUAAAAQcHJldmlvdXNJbnRlcmVzdAUAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAUAAAARdG90YWxGYXJtaW5nUG93ZXIDCQEAAAACIT0AAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEXRvdGFsX3N0YXJ0SGVpZ2h0AAAAAAAAAAAACQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAF3RvdGFsX2xhc3RDaGVja0ludGVyZXN0CQAAAgAAAAECAAAAHGZhcm1pbmcgaXMgbm90IGxhdW5jaGVkLCB5ZXQBAAAAFGNhbGNBc3NldFJld2FyZERlbHRhAAAAAwAAAAdhZGRyZXNzAAAAB2Fzc2V0SWQAAAARYXNzZXRGYXJtaW5nUG93ZXIEAAAAFmxhc3RDaGVja0Fzc2V0SW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAHYXNzZXRJZAIAAAASX2xhc3RDaGVja0ludGVyZXN0BAAAAA9jdXJyZW50SW50ZXJlc3QJAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAACQAAaAAAAAIFAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQAAZQAAAAIFAAAAD2N1cnJlbnRJbnRlcmVzdAUAAAAWbGFzdENoZWNrQXNzZXRJbnRlcmVzdAEAAAAUYWRkQXNzZXRJZFRvR2VuRW50cnkAAAACAAAAB2Fzc2V0SWQAAAAIYXNzZXRHZW4EAAAADGN1cnJlbnRWYWx1ZQkBAAAADHRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdhc3NldHNfBQAAAAhhc3NldEdlbgIAAAAHX2xvY2tlZAMJAAAAAAAAAgUAAAAMY3VycmVudFZhbHVlAgAAAAAFAAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACBQAAAAxjdXJyZW50VmFsdWUCAAAAASwFAAAAB2Fzc2V0SWQBAAAADmdldFN0YWtlUmVzdWx0AAAABAAAAAdhZGRyZXNzAAAAB2Fzc2V0SWQAAAARYXNzZXRGYXJtaW5nUG93ZXIAAAAIdW5zdGFrZXIEAAAABWFzc2V0CQACWAAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgUAAAARYXNzZXRGYXJtaW5nUG93ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAF3RvdGFsX2xhc3RDaGVja0ludGVyZXN0CQEAAAASZ2V0Q3VycmVudEludGVyZXN0AAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAddG90YWxfbGFzdENoZWNrSW50ZXJlc3RIZWlnaHQFAAAABmhlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGYXNzZXRfBQAAAAVhc3NldAIAAAAGX293bmVyBQAAAAdhZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAANX2Zhcm1pbmdQb3dlcgUAAAARYXNzZXRGYXJtaW5nUG93ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAABJfbGFzdENoZWNrSW50ZXJlc3QJAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAACQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAAlfdW5zdGFrZXIFAAAACHVuc3Rha2VyBQAAAANuaWwBAAAAEGdldFVuc3Rha2VSZXN1bHQAAAAFAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAAAAAtyZXdhcmREZWx0YQAAAA93aXRoZHJhd25BbW91bnQAAAARYXNzZXRGYXJtaW5nUG93ZXIEAAAABWFzc2V0CQACWAAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgkAAGUAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgUAAAARYXNzZXRGYXJtaW5nUG93ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAF3RvdGFsX2xhc3RDaGVja0ludGVyZXN0CQEAAAASZ2V0Q3VycmVudEludGVyZXN0AAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAddG90YWxfbGFzdENoZWNrSW50ZXJlc3RIZWlnaHQFAAAABmhlaWdodAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGYXNzZXRfBQAAAAVhc3NldAIAAAAGX293bmVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAANX2Zhcm1pbmdQb3dlcgAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEl9sYXN0Q2hlY2tJbnRlcmVzdAkBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAABBfd2l0aGRyYXduQW1vdW50CQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEF93aXRoZHJhd25BbW91bnQJAABoAAAAAgUAAAAPd2l0aGRyYXduQW1vdW50BQAAAAZzY2FsZTIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAABZfbGFzdENoZWNrRmFybWVkQW1vdW50CQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQFAAAAC3Jld2FyZERlbHRhBQAAAANuaWwBAAAAE2NhbGN1bGF0ZVBlcmNoUHJpY2UAAAABAAAAB2FkZHJlc3MEAAAAEWhhc0FydGVmYWN0U3Rha2VkCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAUZ2V0QWNjQm9vc3RlckFkZHJlc3MAAAAACQABLAAAAAIJAAEsAAAAAgIAAAALQVJULVhNSVNUTF8FAAAAB2FkZHJlc3MCAAAABl9vd25lcgMJAAAAAAAAAgUAAAARaGFzQXJ0ZWZhY3RTdGFrZWQCAAAAAAUAAAAKcGVyY2hQcmljZQkAAGgAAAACCQAAaQAAAAIFAAAACnBlcmNoUHJpY2UAAAAAAAAAAAoAAAAAAAAAAAkBAAAAC2lzVHJ1c3RlZFNjAAAAAQAAAAdhZGRyZXNzBAAAABBhbGxvd2VkQ29udHJhY3RzCQEAAAATZ2V0VHJ1c3RlZENvbnRyYWN0cwAAAAAEAAAAFGFsbG93ZWRD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eW91IHdpbGwgYmUgbm90IGFibGUgdG8gY2xhaW0geW91ciBmYXJtaW5nIHJld2FyZHMgdGlsbCB0aGUgZW5kIG9mIER1Y2tTcXVpZCBnYW1lLiBRdWFjayBpbiBwZWFjZSEEAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAAFYXNzZXQEAAAABWNvbG9yCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAC19wZXJjaENvbG9yBAAAABFhc3NldEZhcm1pbmdQb3dlcgkBAAAAHWdldExhc3RLbm93bkFzc2V0RmFybWluZ1Bvd2VyAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAABRjYWxjQXNzZXRSZXdhcmREZWx0YQAAAAMFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAMZmFybWVkQW1vdW50CQAAZAAAAAIFAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQEAAAAD3dpdGhkcmF3bkFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAQX3dpdGhkcmF3bkFtb3VudAQAAAAGcmV3YXJkCQAAaQAAAAIJAABlAAAAAgUAAAAMZmFybWVkQW1vdW50BQAAAA93aXRoZHJhd25BbW91bnQJAABoAAAAAgUAAAAFc2NhbGUAAAAAAAAAAGQEAAAACHVuc3Rha2VyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAA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", "height": 3150009, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 49HFdCE23qpe6RY5EmCzuvuTsMuLyEuDvuXZtpkvSDY2 Next: 9uL7bkYat89d43MjfuG8JkFzDcDRCWetbsqoS5W2jSiA Diff:
Old | New | Differences | |
---|---|---|---|
122 | 122 | let N = g | |
123 | 123 | N | |
124 | 124 | } | |
125 | - | else throw("wrong type, expected: String") | |
125 | + | else throw("FAS: wrong type, expected: String") | |
126 | 126 | } | |
127 | 127 | ||
128 | 128 | ||
133 | 133 | let P = g | |
134 | 134 | P | |
135 | 135 | } | |
136 | - | else throw("wrong type, expected: Int") | |
136 | + | else throw("FAI: wrong type, expected: Int") | |
137 | 137 | } | |
138 | 138 | ||
139 | 139 | ||
228 | 228 | } | |
229 | 229 | ||
230 | 230 | ||
231 | - | @Callable(av) | |
232 | - | func configureOracle (aw) = if ((av.caller != this)) | |
233 | - | then throw("admin only") | |
234 | - | else [StringEntry("static_oracleAddress", aw)] | |
231 | + | func av (e) = { | |
232 | + | let aw = t() | |
233 | + | let ax = split(aw, ";") | |
234 | + | (indexOf(ax, e) == unit) | |
235 | + | } | |
236 | + | ||
237 | + | ||
238 | + | @Callable(ay) | |
239 | + | func configureOracle (az) = if ((ay.caller != this)) | |
240 | + | then throw("FCO: admin only") | |
241 | + | else [StringEntry("static_oracleAddress", az)] | |
235 | 242 | ||
236 | 243 | ||
237 | 244 | ||
238 | - | @Callable( | |
239 | - | func init () = if (( | |
240 | - | then throw("admin only") | |
245 | + | @Callable(ay) | |
246 | + | func init () = if ((ay.caller != this)) | |
247 | + | then throw("FI: admin only") | |
241 | 248 | else [IntegerEntry("total_startHeight", height)] | |
242 | 249 | ||
243 | 250 | ||
244 | 251 | ||
245 | - | @Callable( | |
246 | - | func buyPerch ( | |
247 | - | let | |
248 | - | if (( | |
249 | - | then if ((0 > value(indexOf(["B", "R", "G", "Y"], | |
252 | + | @Callable(ay) | |
253 | + | func buyPerch (aA,aB) = { | |
254 | + | let aC = A() | |
255 | + | if ((aC == aC)) | |
256 | + | then if ((0 > value(indexOf(["B", "R", "G", "Y"], aA)))) | |
250 | 257 | then throw("you need to set color properly") | |
251 | 258 | else { | |
252 | - | let | |
253 | - | let | |
254 | - | if (( | |
259 | + | let aD = at(toString(ay.caller)) | |
260 | + | let aE = O(invoke(x(), "useCoupons", [aD], nil)) | |
261 | + | if ((aE == aE)) | |
255 | 262 | then { | |
256 | - | let | |
257 | - | let | |
263 | + | let aF = (aD - aE) | |
264 | + | let aG = if ((aF != 0)) | |
258 | 265 | then { | |
259 | - | let | |
260 | - | if (( | |
261 | - | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(k()))) | |
262 | - | else if (( | |
263 | - | then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString( | |
266 | + | let aH = value(ay.payments[0]) | |
267 | + | if ((aH.assetId != k())) | |
268 | + | then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(k()))) | |
269 | + | else if ((aH.amount != aF)) | |
270 | + | then throw(("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(aF))) | |
264 | 271 | else { | |
265 | - | let | |
266 | - | let | |
267 | - | if (( | |
268 | - | then | |
272 | + | let aI = fraction(aF, y, 100) | |
273 | + | let aJ = invoke(p(), "refPayment", [aB], [AttachedPayment(k(), aI)]) | |
274 | + | if ((aJ == aJ)) | |
275 | + | then aF | |
269 | 276 | else throw("Strict value is not equal to itself.") | |
270 | 277 | } | |
271 | 278 | } | |
272 | 279 | else 0 | |
273 | - | if (( | |
280 | + | if ((aG == aG)) | |
274 | 281 | then { | |
275 | - | let | |
276 | - | let | |
277 | - | [IntegerEntry( | |
282 | + | let aK = ((("address_" + toString(ay.caller)) + "_perchesAvailable_") + aA) | |
283 | + | let aL = B(aK) | |
284 | + | [IntegerEntry(aK, (aL + 1))] | |
278 | 285 | } | |
279 | 286 | else throw("Strict value is not equal to itself.") | |
280 | 287 | } | |
285 | 292 | ||
286 | 293 | ||
287 | 294 | ||
288 | - | @Callable( | |
289 | - | func addFreePerch (e, | |
290 | - | let | |
291 | - | if (( | |
292 | - | then if ((0 > value(indexOf(["B", "R", "G", "Y"], | |
295 | + | @Callable(ay) | |
296 | + | func addFreePerch (e,aA) = { | |
297 | + | let aC = A() | |
298 | + | if ((aC == aC)) | |
299 | + | then if ((0 > value(indexOf(["B", "R", "G", "Y"], aA)))) | |
293 | 300 | then throw("you need to set color properly") | |
294 | - | else if (if (if (( | |
295 | - | then ( | |
301 | + | else if (if (if ((ay.caller != m())) | |
302 | + | then (ay.caller != this) | |
296 | 303 | else false) | |
297 | - | then ( | |
304 | + | then (ay.caller != n()) | |
298 | 305 | else false) | |
299 | 306 | then throw("rebirth and swop promo only") | |
300 | 307 | else { | |
301 | - | let | |
302 | - | let | |
303 | - | $Tuple2([IntegerEntry( | |
308 | + | let aK = ((("address_" + e) + "_perchesAvailable_") + aA) | |
309 | + | let aL = B(aK) | |
310 | + | $Tuple2([IntegerEntry(aK, (aL + 1))], "") | |
304 | 311 | } | |
305 | 312 | else throw("Strict value is not equal to itself.") | |
306 | 313 | } | |
307 | 314 | ||
308 | 315 | ||
309 | 316 | ||
310 | - | @Callable( | |
317 | + | @Callable(ay) | |
311 | 318 | func stakeNFT () = { | |
312 | - | let | |
313 | - | if (( | |
319 | + | let aC = A() | |
320 | + | if ((aC == aC)) | |
314 | 321 | then { | |
315 | - | let aJ = value(av.payments[0]) | |
316 | - | let R = value(value(av.payments[0]).assetId) | |
317 | - | let aK = toString(av.caller) | |
318 | - | let e = if (if ((r() == av.caller)) | |
319 | - | then true | |
320 | - | else (w() == av.caller)) | |
321 | - | then aK | |
322 | - | else toString(av.originCaller) | |
323 | - | let ax = takeRight(value(assetInfo(R)).name, 1) | |
324 | - | let aL = B(((("address_" + e) + "_perchesAvailable_") + ax)) | |
325 | - | if ((aJ.amount != 1)) | |
322 | + | let aM = value(ay.payments[0]) | |
323 | + | let R = value(value(ay.payments[0]).assetId) | |
324 | + | let aN = toString(ay.caller) | |
325 | + | let e = if (av(toString(ay.caller))) | |
326 | + | then toString(ay.originCaller) | |
327 | + | else aN | |
328 | + | let aA = takeRight(value(assetInfo(R)).name, 1) | |
329 | + | let aO = B(((("address_" + e) + "_perchesAvailable_") + aA)) | |
330 | + | if ((aM.amount != 1)) | |
326 | 331 | then throw("NFT is not attached") | |
327 | - | else if ((0 >= | |
328 | - | then throw(("no perches available for the color " + | |
332 | + | else if ((0 >= aO)) | |
333 | + | then throw(("no perches available for the color " + aA)) | |
329 | 334 | else { | |
330 | - | let | |
331 | - | let al = | |
332 | - | let ah = | |
333 | - | (an(e, R, ah, | |
335 | + | let aP = Q(R, e) | |
336 | + | let al = aP._1 | |
337 | + | let ah = aP._2 | |
338 | + | (an(e, R, ah, aN) ++ [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + aA), (aO - 1))]) | |
334 | 339 | } | |
335 | 340 | } | |
336 | 341 | else throw("Strict value is not equal to itself.") | |
338 | 343 | ||
339 | 344 | ||
340 | 345 | ||
341 | - | @Callable( | |
346 | + | @Callable(ay) | |
342 | 347 | func stakeNFTWithoutPerch () = { | |
343 | - | let | |
344 | - | if (( | |
348 | + | let aC = A() | |
349 | + | if ((aC == aC)) | |
345 | 350 | then { | |
346 | - | let aN = t() | |
347 | - | let aO = split(aN, ";") | |
348 | - | let aP = toString(av.caller) | |
349 | - | if ((indexOf(aO, aP) == unit)) | |
350 | - | then throw("Only trusted smart contracts can stake without a perch!") | |
351 | + | let aQ = toString(ay.caller) | |
352 | + | if (av(aQ)) | |
353 | + | then throw("FSNWP: Only trusted smart contracts can stake without a perch!") | |
351 | 354 | else { | |
352 | - | let | |
353 | - | let R = value(value( | |
354 | - | let e = toString( | |
355 | - | if (( | |
355 | + | let aM = value(ay.payments[0]) | |
356 | + | let R = value(value(ay.payments[0]).assetId) | |
357 | + | let e = toString(ay.originCaller) | |
358 | + | if ((aM.amount != 1)) | |
356 | 359 | then throw("NFT is not attached") | |
357 | 360 | else { | |
358 | - | let | |
359 | - | let al = | |
360 | - | let ah = | |
361 | + | let aR = Q(R, e) | |
362 | + | let al = aR._1 | |
363 | + | let ah = aR._2 | |
361 | 364 | let ap = toBase58String(R) | |
362 | - | let | |
363 | - | (an(e, R, ah, | |
365 | + | let aN = toString(ay.caller) | |
366 | + | (an(e, R, ah, aN) ++ [BooleanEntry((((("address_" + e) + "_asset_") + ap) + "_without_perch"), true)]) | |
364 | 367 | } | |
365 | 368 | } | |
366 | 369 | } | |
369 | 372 | ||
370 | 373 | ||
371 | 374 | ||
372 | - | @Callable( | |
375 | + | @Callable(ay) | |
373 | 376 | func unstakeNFT (ap) = { | |
374 | - | let | |
375 | - | if (( | |
377 | + | let aC = A() | |
378 | + | if ((aC == aC)) | |
376 | 379 | then { | |
377 | - | let | |
378 | - | if (E( | |
379 | - | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
380 | + | let aS = toString(ay.originCaller) | |
381 | + | if (E(aS)) | |
382 | + | then throw("FUN: Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
380 | 383 | else { | |
381 | 384 | let R = fromBase58String(ap) | |
382 | - | let ao = i((((("address_" + aR) + "_asset_") + ap) + "_unstaker")) | |
383 | - | let e = if (if ((r() == av.caller)) | |
384 | - | then true | |
385 | - | else (w() == av.caller)) | |
386 | - | then toString(av.caller) | |
387 | - | else aR | |
385 | + | let ao = i((((("address_" + aS) + "_asset_") + ap) + "_unstaker")) | |
386 | + | let e = if (av(toString(ay.caller))) | |
387 | + | then aS | |
388 | + | else toString(ay.caller) | |
388 | 389 | let ah = Y(e, ap) | |
389 | - | let | |
390 | - | let | |
390 | + | let aT = ag(e, ap, ah) | |
391 | + | let aU = (aT + B((((("address_" + e) + "_asset_") + ap) + "_lastCheckFarmedAmount"))) | |
391 | 392 | let as = B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
393 | + | let aV = ((aU - as) / (b * 100)) | |
394 | + | let aA = takeRight(value(assetInfo(R)).name, 1) | |
395 | + | let aN = toString(ay.caller) | |
395 | 396 | if (if ((ao != "")) | |
396 | - | then (ao != | |
397 | + | then (ao != aN) | |
397 | 398 | else false) | |
398 | - | then throw("It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
399 | + | then throw("FUN: It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
399 | 400 | else if ((0 >= ah)) | |
400 | - | then throw("asset not available") | |
401 | + | then throw("FUN: asset not available") | |
401 | 402 | else { | |
402 | - | let | |
403 | - | if (( | |
404 | - | then throw("use another function to unstake Jackpot NFT") | |
403 | + | let aW = D((((("address_" + e) + "_asset_") + ap) + "_without_perch")) | |
404 | + | if ((aA == "U")) | |
405 | + | then throw("FUN: use another function to unstake Jackpot NFT") | |
405 | 406 | else { | |
406 | - | let | |
407 | - | let | |
407 | + | let aX = aq(e, R, aT, aV, ah) | |
408 | + | let aY = if (aW) | |
408 | 409 | then [DeleteEntry((((("address_" + e) + "_asset_") + ap) + "_without_perch"))] | |
409 | - | else [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + | |
410 | - | $Tuple2((( | |
410 | + | else [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + aA), (B(((("address_" + e) + "_perchesAvailable_") + aA)) + 1))] | |
411 | + | $Tuple2(((aX ++ [ScriptTransfer(ay.caller, (aV * 1000000), k()), ScriptTransfer(ay.caller, 1, R)]) ++ aY), (aV * 1000000)) | |
411 | 412 | } | |
412 | 413 | } | |
413 | 414 | } | |
417 | 418 | ||
418 | 419 | ||
419 | 420 | ||
420 | - | @Callable( | |
421 | - | func stakeJackpot ( | |
422 | - | let | |
423 | - | if (( | |
421 | + | @Callable(ay) | |
422 | + | func stakeJackpot (aA) = { | |
423 | + | let aC = A() | |
424 | + | if ((aC == aC)) | |
424 | 425 | then { | |
425 | - | let aJ = value(av.payments[0]) | |
426 | - | let R = value(aJ.assetId) | |
427 | - | let aK = toString(av.caller) | |
428 | - | let e = if (if ((r() == av.caller)) | |
429 | - | then true | |
430 | - | else (w() == av.caller)) | |
431 | - | then aK | |
432 | - | else toString(av.originCaller) | |
433 | - | let aL = B(((("address_" + e) + "_perchesAvailable_") + ax)) | |
434 | - | let aY = value(assetInfo(R)).issuer | |
435 | - | if ((aJ.amount != 1)) | |
426 | + | let aM = value(ay.payments[0]) | |
427 | + | let R = value(aM.assetId) | |
428 | + | let aN = toString(ay.caller) | |
429 | + | let e = if (av(toString(ay.caller))) | |
430 | + | then toString(ay.originCaller) | |
431 | + | else aN | |
432 | + | let aO = B(((("address_" + e) + "_perchesAvailable_") + aA)) | |
433 | + | let aZ = value(assetInfo(R)).issuer | |
434 | + | if ((aM.amount != 1)) | |
436 | 435 | then throw("NFT is not attached") | |
437 | - | else if (if (( | |
436 | + | else if (if ((aZ == l())) | |
438 | 437 | then true | |
439 | - | else ( | |
438 | + | else (aZ == o())) | |
440 | 439 | then if ((takeRight(value(value(assetInfo(R)).name), 1) != "U")) | |
441 | 440 | then throw("jackpot only") | |
442 | - | else if ((0 >= | |
443 | - | then throw(("no perches available for the color " + | |
441 | + | else if ((0 >= aO)) | |
442 | + | then throw(("FSJ: no perches available for the color " + aA)) | |
444 | 443 | else { | |
445 | - | let | |
446 | - | (an(e, R, | |
444 | + | let ba = Q(R, e) | |
445 | + | (an(e, R, ba._2, aN) ++ [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + aA), (aO - 1)), StringEntry((((("address_" + e) + "_asset_") + toBase58String(R)) + "_perchColor"), aA)]) | |
447 | 446 | } | |
448 | 447 | else throw("asset is not valid") | |
449 | 448 | } | |
452 | 451 | ||
453 | 452 | ||
454 | 453 | ||
455 | - | @Callable( | |
454 | + | @Callable(ay) | |
456 | 455 | func unstakeJackpot (ap) = { | |
457 | - | let | |
458 | - | if (( | |
456 | + | let aC = A() | |
457 | + | if ((aC == aC)) | |
459 | 458 | then { | |
460 | - | let aK = toString(av.caller) | |
461 | - | let e = if (if ((r() == av.caller)) | |
462 | - | then true | |
463 | - | else (w() == av.caller)) | |
464 | - | then aK | |
465 | - | else toString(av.originCaller) | |
459 | + | let aN = toString(ay.caller) | |
460 | + | let e = if (av(toString(ay.caller))) | |
461 | + | then toString(ay.originCaller) | |
462 | + | else aN | |
466 | 463 | if (E(e)) | |
467 | - | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
464 | + | then throw("FUJ: Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
468 | 465 | else { | |
469 | 466 | let R = fromBase58String(ap) | |
470 | - | let | |
467 | + | let aA = i((((("address_" + e) + "_asset_") + ap) + "_perchColor")) | |
471 | 468 | let ah = Y(e, ap) | |
472 | - | let | |
473 | - | let | |
469 | + | let aT = ag(e, ap, ah) | |
470 | + | let aU = (aT + B((((("address_" + e) + "_asset_") + ap) + "_lastCheckFarmedAmount"))) | |
474 | 471 | let as = B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) | |
475 | - | let | |
472 | + | let aV = ((aU - as) / (b * 100)) | |
476 | 473 | let ao = i((((("address_" + e) + "_asset_") + ap) + "_unstaker")) | |
477 | 474 | if (if ((ao != "")) | |
478 | - | then (ao != | |
475 | + | then (ao != aN) | |
479 | 476 | else false) | |
480 | - | then throw("It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
477 | + | then throw("FUJ: It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
481 | 478 | else if ((takeRight(value(value(assetInfo(R)).name), 1) != "U")) | |
482 | 479 | then throw("jackpot only") | |
483 | 480 | else if ((ah > 0)) | |
484 | 481 | then { | |
485 | - | let | |
486 | - | let | |
487 | - | let | |
482 | + | let aX = aq(e, R, aT, aV, ah) | |
483 | + | let aW = D((((("address_" + e) + "_asset_") + ap) + "_without_perch")) | |
484 | + | let aY = if (aW) | |
488 | 485 | then [DeleteEntry((((("address_" + e) + "_asset_") + ap) + "_without_perch"))] | |
489 | - | else [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + | |
490 | - | $Tuple2((( | |
486 | + | else [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + aA), (B(((("address_" + e) + "_perchesAvailable_") + aA)) + 1))] | |
487 | + | $Tuple2(((aX ++ aY) ++ [ScriptTransfer(ay.caller, (aV * 1000000), k()), ScriptTransfer(ay.caller, 1, R)]), (aV * 1000000)) | |
491 | 488 | } | |
492 | - | else throw("Asset farming power not bigger then 0") | |
489 | + | else throw("FUJ: Asset farming power not bigger then 0") | |
493 | 490 | } | |
494 | 491 | } | |
495 | 492 | else throw("Strict value is not equal to itself.") | |
497 | 494 | ||
498 | 495 | ||
499 | 496 | ||
500 | - | @Callable( | |
497 | + | @Callable(ay) | |
501 | 498 | func claimReward (ap) = { | |
502 | - | let | |
503 | - | if (( | |
499 | + | let aC = A() | |
500 | + | if ((aC == aC)) | |
504 | 501 | then { | |
505 | - | let e = if (( | |
506 | - | then toString( | |
507 | - | else toString( | |
502 | + | let e = if ((ay.originCaller == v())) | |
503 | + | then toString(ay.caller) | |
504 | + | else toString(ay.originCaller) | |
508 | 505 | if (E(e)) | |
509 | - | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
506 | + | then throw("FCR: Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
510 | 507 | else { | |
511 | 508 | let R = fromBase58String(ap) | |
512 | 509 | let ah = Y(e, ap) | |
513 | - | let | |
514 | - | let | |
510 | + | let aT = ag(e, ap, ah) | |
511 | + | let aU = (aT + B((((("address_" + e) + "_asset_") + ap) + "_lastCheckFarmedAmount"))) | |
515 | 512 | let as = B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) | |
516 | - | let | |
517 | - | if ((0 >= | |
518 | - | then throw("you have no EGGs to withdraw") | |
519 | - | else $Tuple2([IntegerEntry((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount"), (B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) + ( | |
513 | + | let aV = ((aU - as) / (b * 100)) | |
514 | + | if ((0 >= aV)) | |
515 | + | then throw("FCR: you have no EGGs to withdraw") | |
516 | + | else $Tuple2([IntegerEntry((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount"), (B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) + (aV * c))), ScriptTransfer(Address(fromBase58String(e)), (aV * 1000000), k())], (aV * 1000000)) | |
520 | 517 | } | |
521 | 518 | } | |
522 | 519 | else throw("Strict value is not equal to itself.") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = (100 * 1000000) | |
5 | 5 | ||
6 | 6 | let b = 10000 | |
7 | 7 | ||
8 | 8 | let c = 1000000 | |
9 | 9 | ||
10 | 10 | func d (e,f) = { | |
11 | 11 | let g = getString(e, f) | |
12 | 12 | if ($isInstanceOf(g, "String")) | |
13 | 13 | then { | |
14 | 14 | let h = g | |
15 | 15 | h | |
16 | 16 | } | |
17 | 17 | else "" | |
18 | 18 | } | |
19 | 19 | ||
20 | 20 | ||
21 | 21 | func i (f) = d(this, f) | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func j () = Address(fromBase58String(i("static_oracleAddress"))) | |
25 | 25 | ||
26 | 26 | ||
27 | 27 | func k () = fromBase58String(d(j(), "static_eggAssetId")) | |
28 | 28 | ||
29 | 29 | ||
30 | 30 | func l () = Address(fromBase58String(d(j(), "static_incubatorAddress"))) | |
31 | 31 | ||
32 | 32 | ||
33 | 33 | func m () = Address(fromBase58String(d(j(), "static_rebirthAddress"))) | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | func n () = Address(fromBase58String(d(j(), "static_swopPromoAddress"))) | |
37 | 37 | ||
38 | 38 | ||
39 | 39 | func o () = Address(fromBase58String(d(j(), "static_breederAddress"))) | |
40 | 40 | ||
41 | 41 | ||
42 | 42 | func p () = Address(fromBase58String(d(j(), "static_refContractAddress"))) | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func q () = Address(fromBase58String(d(j(), "static_itemsAddress"))) | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func r () = Address(fromBase58String(d(j(), "static_metaRaceAddress"))) | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | func s () = Address(fromBase58String(d(j(), "static_accBoosterAddress"))) | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | func t () = d(j(), "static_trustedContracts") | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func u () = d(j(), "static_maintenance") | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | func v () = Address(fromBase58String(d(j(), "static_cfMasterAddress"))) | |
61 | 61 | ||
62 | 62 | ||
63 | 63 | func w () = Address(fromBase58String(d(j(), "static_duckWrapper"))) | |
64 | 64 | ||
65 | 65 | ||
66 | 66 | func x () = Address(fromBase58String(d(j(), "static_couponsAddress"))) | |
67 | 67 | ||
68 | 68 | ||
69 | 69 | let y = 5 | |
70 | 70 | ||
71 | 71 | func z () = 684 | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | func A () = if ((u() != "")) | |
75 | 75 | then throw(u()) | |
76 | 76 | else 0 | |
77 | 77 | ||
78 | 78 | ||
79 | 79 | func B (f) = { | |
80 | 80 | let g = getInteger(this, f) | |
81 | 81 | if ($isInstanceOf(g, "Int")) | |
82 | 82 | then { | |
83 | 83 | let C = g | |
84 | 84 | C | |
85 | 85 | } | |
86 | 86 | else 0 | |
87 | 87 | } | |
88 | 88 | ||
89 | 89 | ||
90 | 90 | func D (f) = { | |
91 | 91 | let g = getBoolean(this, f) | |
92 | 92 | if ($isInstanceOf(g, "Boolean")) | |
93 | 93 | then { | |
94 | 94 | let C = g | |
95 | 95 | C | |
96 | 96 | } | |
97 | 97 | else false | |
98 | 98 | } | |
99 | 99 | ||
100 | 100 | ||
101 | 101 | func E (e) = false | |
102 | 102 | ||
103 | 103 | ||
104 | 104 | func F (G) = if ((G == "G")) | |
105 | 105 | then l() | |
106 | 106 | else o() | |
107 | 107 | ||
108 | 108 | ||
109 | 109 | func H (I,G) = { | |
110 | 110 | let J = valueOrErrorMessage(getInteger(F(G), (("stats_" + I) + "_quantity")), (("stats_" + I) + "_quantity not found")) | |
111 | 111 | let K = pow((10000 / J), 4, 5, 1, 2, FLOOR) | |
112 | 112 | if ((K > 0)) | |
113 | 113 | then K | |
114 | 114 | else 2 | |
115 | 115 | } | |
116 | 116 | ||
117 | 117 | ||
118 | 118 | func L (M) = { | |
119 | 119 | let g = M | |
120 | 120 | if ($isInstanceOf(g, "String")) | |
121 | 121 | then { | |
122 | 122 | let N = g | |
123 | 123 | N | |
124 | 124 | } | |
125 | - | else throw("wrong type, expected: String") | |
125 | + | else throw("FAS: wrong type, expected: String") | |
126 | 126 | } | |
127 | 127 | ||
128 | 128 | ||
129 | 129 | func O (M) = { | |
130 | 130 | let g = M | |
131 | 131 | if ($isInstanceOf(g, "Int")) | |
132 | 132 | then { | |
133 | 133 | let P = g | |
134 | 134 | P | |
135 | 135 | } | |
136 | - | else throw("wrong type, expected: Int") | |
136 | + | else throw("FAI: wrong type, expected: Int") | |
137 | 137 | } | |
138 | 138 | ||
139 | 139 | ||
140 | 140 | func Q (R,e) = if (if ((value(assetInfo(R)).issuer == o())) | |
141 | 141 | then true | |
142 | 142 | else (value(assetInfo(R)).issuer == l())) | |
143 | 143 | then { | |
144 | 144 | let S = O(invoke(q(), "calculateFarmingPowerBoost", [toBase58String(R), e], nil)) | |
145 | 145 | if ((S == S)) | |
146 | 146 | then { | |
147 | 147 | let T = value(assetInfo(R)).name | |
148 | 148 | let U = (takeRight(value(T), 1) == "U") | |
149 | 149 | let V = if (U) | |
150 | 150 | then "" | |
151 | 151 | else L(invoke(o(), "getGenFromName", [T], nil)) | |
152 | 152 | if ((V == V)) | |
153 | 153 | then { | |
154 | 154 | let W = if (U) | |
155 | 155 | then 100 | |
156 | 156 | else { | |
157 | 157 | let G = take(takeRight(T, 2), 1) | |
158 | 158 | H(V, G) | |
159 | 159 | } | |
160 | 160 | let X = (W + fraction(W, S, 100)) | |
161 | 161 | $Tuple2(V, X) | |
162 | 162 | } | |
163 | 163 | else throw("Strict value is not equal to itself.") | |
164 | 164 | } | |
165 | 165 | else throw("Strict value is not equal to itself.") | |
166 | 166 | } | |
167 | 167 | else throw("not valid NFT") | |
168 | 168 | ||
169 | 169 | ||
170 | 170 | func Y (e,R) = B((((("address_" + e) + "_asset_") + R) + "_farmingPower")) | |
171 | 171 | ||
172 | 172 | ||
173 | 173 | func Z (aa) = { | |
174 | 174 | let ab = i(("assets_" + aa)) | |
175 | 175 | if ((ab == "")) | |
176 | 176 | then nil | |
177 | 177 | else split(ab, ",") | |
178 | 178 | } | |
179 | 179 | ||
180 | 180 | ||
181 | 181 | func ac (ad,ae,X) = (ad + (((b * z()) * (height - ae)) / X)) | |
182 | 182 | ||
183 | 183 | ||
184 | 184 | func af () = if ((B("total_farmingPower") > 0)) | |
185 | 185 | then { | |
186 | 186 | let ad = B("total_lastCheckInterest") | |
187 | 187 | let ae = B("total_lastCheckInterestHeight") | |
188 | 188 | let X = B("total_farmingPower") | |
189 | 189 | ac(ad, ae, X) | |
190 | 190 | } | |
191 | 191 | else if ((B("total_startHeight") != 0)) | |
192 | 192 | then B("total_lastCheckInterest") | |
193 | 193 | else throw("farming is not launched, yet") | |
194 | 194 | ||
195 | 195 | ||
196 | 196 | func ag (e,R,ah) = { | |
197 | 197 | let ai = B((((("address_" + e) + "_asset_") + R) + "_lastCheckInterest")) | |
198 | 198 | let aj = af() | |
199 | 199 | (ah * (aj - ai)) | |
200 | 200 | } | |
201 | 201 | ||
202 | 202 | ||
203 | 203 | func ak (R,al) = { | |
204 | 204 | let am = i((("assets_" + al) + "_locked")) | |
205 | 205 | if ((am == "")) | |
206 | 206 | then R | |
207 | 207 | else ((am + ",") + R) | |
208 | 208 | } | |
209 | 209 | ||
210 | 210 | ||
211 | 211 | func an (e,R,ah,ao) = { | |
212 | 212 | let ap = toBase58String(R) | |
213 | 213 | [IntegerEntry("total_farmingPower", (B("total_farmingPower") + ah)), IntegerEntry("total_lastCheckInterest", af()), IntegerEntry("total_lastCheckInterestHeight", height), StringEntry((("asset_" + ap) + "_owner"), e), IntegerEntry((((("address_" + e) + "_asset_") + ap) + "_farmingPower"), ah), IntegerEntry((((("address_" + e) + "_asset_") + ap) + "_lastCheckInterest"), af()), StringEntry((((("address_" + e) + "_asset_") + ap) + "_unstaker"), ao)] | |
214 | 214 | } | |
215 | 215 | ||
216 | 216 | ||
217 | 217 | func aq (e,R,ar,as,ah) = { | |
218 | 218 | let ap = toBase58String(R) | |
219 | 219 | [IntegerEntry("total_farmingPower", (B("total_farmingPower") - ah)), IntegerEntry("total_lastCheckInterest", af()), IntegerEntry("total_lastCheckInterestHeight", height), DeleteEntry((("asset_" + ap) + "_owner")), IntegerEntry((((("address_" + e) + "_asset_") + ap) + "_farmingPower"), 0), IntegerEntry((((("address_" + e) + "_asset_") + ap) + "_lastCheckInterest"), af()), IntegerEntry((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount"), (B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) + (as * c))), IntegerEntry((((("address_" + e) + "_asset_") + ap) + "_lastCheckFarmedAmount"), (B((((("address_" + e) + "_asset_") + ap) + "_lastCheckFarmedAmount")) + ar))] | |
220 | 220 | } | |
221 | 221 | ||
222 | 222 | ||
223 | 223 | func at (e) = { | |
224 | 224 | let au = d(s(), (("ART-XMISTL_" + e) + "_owner")) | |
225 | 225 | if ((au == "")) | |
226 | 226 | then a | |
227 | 227 | else ((a / 10) * 9) | |
228 | 228 | } | |
229 | 229 | ||
230 | 230 | ||
231 | - | @Callable(av) | |
232 | - | func configureOracle (aw) = if ((av.caller != this)) | |
233 | - | then throw("admin only") | |
234 | - | else [StringEntry("static_oracleAddress", aw)] | |
231 | + | func av (e) = { | |
232 | + | let aw = t() | |
233 | + | let ax = split(aw, ";") | |
234 | + | (indexOf(ax, e) == unit) | |
235 | + | } | |
236 | + | ||
237 | + | ||
238 | + | @Callable(ay) | |
239 | + | func configureOracle (az) = if ((ay.caller != this)) | |
240 | + | then throw("FCO: admin only") | |
241 | + | else [StringEntry("static_oracleAddress", az)] | |
235 | 242 | ||
236 | 243 | ||
237 | 244 | ||
238 | - | @Callable( | |
239 | - | func init () = if (( | |
240 | - | then throw("admin only") | |
245 | + | @Callable(ay) | |
246 | + | func init () = if ((ay.caller != this)) | |
247 | + | then throw("FI: admin only") | |
241 | 248 | else [IntegerEntry("total_startHeight", height)] | |
242 | 249 | ||
243 | 250 | ||
244 | 251 | ||
245 | - | @Callable( | |
246 | - | func buyPerch ( | |
247 | - | let | |
248 | - | if (( | |
249 | - | then if ((0 > value(indexOf(["B", "R", "G", "Y"], | |
252 | + | @Callable(ay) | |
253 | + | func buyPerch (aA,aB) = { | |
254 | + | let aC = A() | |
255 | + | if ((aC == aC)) | |
256 | + | then if ((0 > value(indexOf(["B", "R", "G", "Y"], aA)))) | |
250 | 257 | then throw("you need to set color properly") | |
251 | 258 | else { | |
252 | - | let | |
253 | - | let | |
254 | - | if (( | |
259 | + | let aD = at(toString(ay.caller)) | |
260 | + | let aE = O(invoke(x(), "useCoupons", [aD], nil)) | |
261 | + | if ((aE == aE)) | |
255 | 262 | then { | |
256 | - | let | |
257 | - | let | |
263 | + | let aF = (aD - aE) | |
264 | + | let aG = if ((aF != 0)) | |
258 | 265 | then { | |
259 | - | let | |
260 | - | if (( | |
261 | - | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(k()))) | |
262 | - | else if (( | |
263 | - | then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString( | |
266 | + | let aH = value(ay.payments[0]) | |
267 | + | if ((aH.assetId != k())) | |
268 | + | then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(k()))) | |
269 | + | else if ((aH.amount != aF)) | |
270 | + | then throw(("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(aF))) | |
264 | 271 | else { | |
265 | - | let | |
266 | - | let | |
267 | - | if (( | |
268 | - | then | |
272 | + | let aI = fraction(aF, y, 100) | |
273 | + | let aJ = invoke(p(), "refPayment", [aB], [AttachedPayment(k(), aI)]) | |
274 | + | if ((aJ == aJ)) | |
275 | + | then aF | |
269 | 276 | else throw("Strict value is not equal to itself.") | |
270 | 277 | } | |
271 | 278 | } | |
272 | 279 | else 0 | |
273 | - | if (( | |
280 | + | if ((aG == aG)) | |
274 | 281 | then { | |
275 | - | let | |
276 | - | let | |
277 | - | [IntegerEntry( | |
282 | + | let aK = ((("address_" + toString(ay.caller)) + "_perchesAvailable_") + aA) | |
283 | + | let aL = B(aK) | |
284 | + | [IntegerEntry(aK, (aL + 1))] | |
278 | 285 | } | |
279 | 286 | else throw("Strict value is not equal to itself.") | |
280 | 287 | } | |
281 | 288 | else throw("Strict value is not equal to itself.") | |
282 | 289 | } | |
283 | 290 | else throw("Strict value is not equal to itself.") | |
284 | 291 | } | |
285 | 292 | ||
286 | 293 | ||
287 | 294 | ||
288 | - | @Callable( | |
289 | - | func addFreePerch (e, | |
290 | - | let | |
291 | - | if (( | |
292 | - | then if ((0 > value(indexOf(["B", "R", "G", "Y"], | |
295 | + | @Callable(ay) | |
296 | + | func addFreePerch (e,aA) = { | |
297 | + | let aC = A() | |
298 | + | if ((aC == aC)) | |
299 | + | then if ((0 > value(indexOf(["B", "R", "G", "Y"], aA)))) | |
293 | 300 | then throw("you need to set color properly") | |
294 | - | else if (if (if (( | |
295 | - | then ( | |
301 | + | else if (if (if ((ay.caller != m())) | |
302 | + | then (ay.caller != this) | |
296 | 303 | else false) | |
297 | - | then ( | |
304 | + | then (ay.caller != n()) | |
298 | 305 | else false) | |
299 | 306 | then throw("rebirth and swop promo only") | |
300 | 307 | else { | |
301 | - | let | |
302 | - | let | |
303 | - | $Tuple2([IntegerEntry( | |
308 | + | let aK = ((("address_" + e) + "_perchesAvailable_") + aA) | |
309 | + | let aL = B(aK) | |
310 | + | $Tuple2([IntegerEntry(aK, (aL + 1))], "") | |
304 | 311 | } | |
305 | 312 | else throw("Strict value is not equal to itself.") | |
306 | 313 | } | |
307 | 314 | ||
308 | 315 | ||
309 | 316 | ||
310 | - | @Callable( | |
317 | + | @Callable(ay) | |
311 | 318 | func stakeNFT () = { | |
312 | - | let | |
313 | - | if (( | |
319 | + | let aC = A() | |
320 | + | if ((aC == aC)) | |
314 | 321 | then { | |
315 | - | let aJ = value(av.payments[0]) | |
316 | - | let R = value(value(av.payments[0]).assetId) | |
317 | - | let aK = toString(av.caller) | |
318 | - | let e = if (if ((r() == av.caller)) | |
319 | - | then true | |
320 | - | else (w() == av.caller)) | |
321 | - | then aK | |
322 | - | else toString(av.originCaller) | |
323 | - | let ax = takeRight(value(assetInfo(R)).name, 1) | |
324 | - | let aL = B(((("address_" + e) + "_perchesAvailable_") + ax)) | |
325 | - | if ((aJ.amount != 1)) | |
322 | + | let aM = value(ay.payments[0]) | |
323 | + | let R = value(value(ay.payments[0]).assetId) | |
324 | + | let aN = toString(ay.caller) | |
325 | + | let e = if (av(toString(ay.caller))) | |
326 | + | then toString(ay.originCaller) | |
327 | + | else aN | |
328 | + | let aA = takeRight(value(assetInfo(R)).name, 1) | |
329 | + | let aO = B(((("address_" + e) + "_perchesAvailable_") + aA)) | |
330 | + | if ((aM.amount != 1)) | |
326 | 331 | then throw("NFT is not attached") | |
327 | - | else if ((0 >= | |
328 | - | then throw(("no perches available for the color " + | |
332 | + | else if ((0 >= aO)) | |
333 | + | then throw(("no perches available for the color " + aA)) | |
329 | 334 | else { | |
330 | - | let | |
331 | - | let al = | |
332 | - | let ah = | |
333 | - | (an(e, R, ah, | |
335 | + | let aP = Q(R, e) | |
336 | + | let al = aP._1 | |
337 | + | let ah = aP._2 | |
338 | + | (an(e, R, ah, aN) ++ [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + aA), (aO - 1))]) | |
334 | 339 | } | |
335 | 340 | } | |
336 | 341 | else throw("Strict value is not equal to itself.") | |
337 | 342 | } | |
338 | 343 | ||
339 | 344 | ||
340 | 345 | ||
341 | - | @Callable( | |
346 | + | @Callable(ay) | |
342 | 347 | func stakeNFTWithoutPerch () = { | |
343 | - | let | |
344 | - | if (( | |
348 | + | let aC = A() | |
349 | + | if ((aC == aC)) | |
345 | 350 | then { | |
346 | - | let aN = t() | |
347 | - | let aO = split(aN, ";") | |
348 | - | let aP = toString(av.caller) | |
349 | - | if ((indexOf(aO, aP) == unit)) | |
350 | - | then throw("Only trusted smart contracts can stake without a perch!") | |
351 | + | let aQ = toString(ay.caller) | |
352 | + | if (av(aQ)) | |
353 | + | then throw("FSNWP: Only trusted smart contracts can stake without a perch!") | |
351 | 354 | else { | |
352 | - | let | |
353 | - | let R = value(value( | |
354 | - | let e = toString( | |
355 | - | if (( | |
355 | + | let aM = value(ay.payments[0]) | |
356 | + | let R = value(value(ay.payments[0]).assetId) | |
357 | + | let e = toString(ay.originCaller) | |
358 | + | if ((aM.amount != 1)) | |
356 | 359 | then throw("NFT is not attached") | |
357 | 360 | else { | |
358 | - | let | |
359 | - | let al = | |
360 | - | let ah = | |
361 | + | let aR = Q(R, e) | |
362 | + | let al = aR._1 | |
363 | + | let ah = aR._2 | |
361 | 364 | let ap = toBase58String(R) | |
362 | - | let | |
363 | - | (an(e, R, ah, | |
365 | + | let aN = toString(ay.caller) | |
366 | + | (an(e, R, ah, aN) ++ [BooleanEntry((((("address_" + e) + "_asset_") + ap) + "_without_perch"), true)]) | |
364 | 367 | } | |
365 | 368 | } | |
366 | 369 | } | |
367 | 370 | else throw("Strict value is not equal to itself.") | |
368 | 371 | } | |
369 | 372 | ||
370 | 373 | ||
371 | 374 | ||
372 | - | @Callable( | |
375 | + | @Callable(ay) | |
373 | 376 | func unstakeNFT (ap) = { | |
374 | - | let | |
375 | - | if (( | |
377 | + | let aC = A() | |
378 | + | if ((aC == aC)) | |
376 | 379 | then { | |
377 | - | let | |
378 | - | if (E( | |
379 | - | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
380 | + | let aS = toString(ay.originCaller) | |
381 | + | if (E(aS)) | |
382 | + | then throw("FUN: Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
380 | 383 | else { | |
381 | 384 | let R = fromBase58String(ap) | |
382 | - | let ao = i((((("address_" + aR) + "_asset_") + ap) + "_unstaker")) | |
383 | - | let e = if (if ((r() == av.caller)) | |
384 | - | then true | |
385 | - | else (w() == av.caller)) | |
386 | - | then toString(av.caller) | |
387 | - | else aR | |
385 | + | let ao = i((((("address_" + aS) + "_asset_") + ap) + "_unstaker")) | |
386 | + | let e = if (av(toString(ay.caller))) | |
387 | + | then aS | |
388 | + | else toString(ay.caller) | |
388 | 389 | let ah = Y(e, ap) | |
389 | - | let | |
390 | - | let | |
390 | + | let aT = ag(e, ap, ah) | |
391 | + | let aU = (aT + B((((("address_" + e) + "_asset_") + ap) + "_lastCheckFarmedAmount"))) | |
391 | 392 | let as = B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
393 | + | let aV = ((aU - as) / (b * 100)) | |
394 | + | let aA = takeRight(value(assetInfo(R)).name, 1) | |
395 | + | let aN = toString(ay.caller) | |
395 | 396 | if (if ((ao != "")) | |
396 | - | then (ao != | |
397 | + | then (ao != aN) | |
397 | 398 | else false) | |
398 | - | then throw("It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
399 | + | then throw("FUN: It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
399 | 400 | else if ((0 >= ah)) | |
400 | - | then throw("asset not available") | |
401 | + | then throw("FUN: asset not available") | |
401 | 402 | else { | |
402 | - | let | |
403 | - | if (( | |
404 | - | then throw("use another function to unstake Jackpot NFT") | |
403 | + | let aW = D((((("address_" + e) + "_asset_") + ap) + "_without_perch")) | |
404 | + | if ((aA == "U")) | |
405 | + | then throw("FUN: use another function to unstake Jackpot NFT") | |
405 | 406 | else { | |
406 | - | let | |
407 | - | let | |
407 | + | let aX = aq(e, R, aT, aV, ah) | |
408 | + | let aY = if (aW) | |
408 | 409 | then [DeleteEntry((((("address_" + e) + "_asset_") + ap) + "_without_perch"))] | |
409 | - | else [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + | |
410 | - | $Tuple2((( | |
410 | + | else [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + aA), (B(((("address_" + e) + "_perchesAvailable_") + aA)) + 1))] | |
411 | + | $Tuple2(((aX ++ [ScriptTransfer(ay.caller, (aV * 1000000), k()), ScriptTransfer(ay.caller, 1, R)]) ++ aY), (aV * 1000000)) | |
411 | 412 | } | |
412 | 413 | } | |
413 | 414 | } | |
414 | 415 | } | |
415 | 416 | else throw("Strict value is not equal to itself.") | |
416 | 417 | } | |
417 | 418 | ||
418 | 419 | ||
419 | 420 | ||
420 | - | @Callable( | |
421 | - | func stakeJackpot ( | |
422 | - | let | |
423 | - | if (( | |
421 | + | @Callable(ay) | |
422 | + | func stakeJackpot (aA) = { | |
423 | + | let aC = A() | |
424 | + | if ((aC == aC)) | |
424 | 425 | then { | |
425 | - | let aJ = value(av.payments[0]) | |
426 | - | let R = value(aJ.assetId) | |
427 | - | let aK = toString(av.caller) | |
428 | - | let e = if (if ((r() == av.caller)) | |
429 | - | then true | |
430 | - | else (w() == av.caller)) | |
431 | - | then aK | |
432 | - | else toString(av.originCaller) | |
433 | - | let aL = B(((("address_" + e) + "_perchesAvailable_") + ax)) | |
434 | - | let aY = value(assetInfo(R)).issuer | |
435 | - | if ((aJ.amount != 1)) | |
426 | + | let aM = value(ay.payments[0]) | |
427 | + | let R = value(aM.assetId) | |
428 | + | let aN = toString(ay.caller) | |
429 | + | let e = if (av(toString(ay.caller))) | |
430 | + | then toString(ay.originCaller) | |
431 | + | else aN | |
432 | + | let aO = B(((("address_" + e) + "_perchesAvailable_") + aA)) | |
433 | + | let aZ = value(assetInfo(R)).issuer | |
434 | + | if ((aM.amount != 1)) | |
436 | 435 | then throw("NFT is not attached") | |
437 | - | else if (if (( | |
436 | + | else if (if ((aZ == l())) | |
438 | 437 | then true | |
439 | - | else ( | |
438 | + | else (aZ == o())) | |
440 | 439 | then if ((takeRight(value(value(assetInfo(R)).name), 1) != "U")) | |
441 | 440 | then throw("jackpot only") | |
442 | - | else if ((0 >= | |
443 | - | then throw(("no perches available for the color " + | |
441 | + | else if ((0 >= aO)) | |
442 | + | then throw(("FSJ: no perches available for the color " + aA)) | |
444 | 443 | else { | |
445 | - | let | |
446 | - | (an(e, R, | |
444 | + | let ba = Q(R, e) | |
445 | + | (an(e, R, ba._2, aN) ++ [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + aA), (aO - 1)), StringEntry((((("address_" + e) + "_asset_") + toBase58String(R)) + "_perchColor"), aA)]) | |
447 | 446 | } | |
448 | 447 | else throw("asset is not valid") | |
449 | 448 | } | |
450 | 449 | else throw("Strict value is not equal to itself.") | |
451 | 450 | } | |
452 | 451 | ||
453 | 452 | ||
454 | 453 | ||
455 | - | @Callable( | |
454 | + | @Callable(ay) | |
456 | 455 | func unstakeJackpot (ap) = { | |
457 | - | let | |
458 | - | if (( | |
456 | + | let aC = A() | |
457 | + | if ((aC == aC)) | |
459 | 458 | then { | |
460 | - | let aK = toString(av.caller) | |
461 | - | let e = if (if ((r() == av.caller)) | |
462 | - | then true | |
463 | - | else (w() == av.caller)) | |
464 | - | then aK | |
465 | - | else toString(av.originCaller) | |
459 | + | let aN = toString(ay.caller) | |
460 | + | let e = if (av(toString(ay.caller))) | |
461 | + | then toString(ay.originCaller) | |
462 | + | else aN | |
466 | 463 | if (E(e)) | |
467 | - | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
464 | + | then throw("FUJ: Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
468 | 465 | else { | |
469 | 466 | let R = fromBase58String(ap) | |
470 | - | let | |
467 | + | let aA = i((((("address_" + e) + "_asset_") + ap) + "_perchColor")) | |
471 | 468 | let ah = Y(e, ap) | |
472 | - | let | |
473 | - | let | |
469 | + | let aT = ag(e, ap, ah) | |
470 | + | let aU = (aT + B((((("address_" + e) + "_asset_") + ap) + "_lastCheckFarmedAmount"))) | |
474 | 471 | let as = B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) | |
475 | - | let | |
472 | + | let aV = ((aU - as) / (b * 100)) | |
476 | 473 | let ao = i((((("address_" + e) + "_asset_") + ap) + "_unstaker")) | |
477 | 474 | if (if ((ao != "")) | |
478 | - | then (ao != | |
475 | + | then (ao != aN) | |
479 | 476 | else false) | |
480 | - | then throw("It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
477 | + | then throw("FUJ: It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
481 | 478 | else if ((takeRight(value(value(assetInfo(R)).name), 1) != "U")) | |
482 | 479 | then throw("jackpot only") | |
483 | 480 | else if ((ah > 0)) | |
484 | 481 | then { | |
485 | - | let | |
486 | - | let | |
487 | - | let | |
482 | + | let aX = aq(e, R, aT, aV, ah) | |
483 | + | let aW = D((((("address_" + e) + "_asset_") + ap) + "_without_perch")) | |
484 | + | let aY = if (aW) | |
488 | 485 | then [DeleteEntry((((("address_" + e) + "_asset_") + ap) + "_without_perch"))] | |
489 | - | else [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + | |
490 | - | $Tuple2((( | |
486 | + | else [IntegerEntry(((("address_" + e) + "_perchesAvailable_") + aA), (B(((("address_" + e) + "_perchesAvailable_") + aA)) + 1))] | |
487 | + | $Tuple2(((aX ++ aY) ++ [ScriptTransfer(ay.caller, (aV * 1000000), k()), ScriptTransfer(ay.caller, 1, R)]), (aV * 1000000)) | |
491 | 488 | } | |
492 | - | else throw("Asset farming power not bigger then 0") | |
489 | + | else throw("FUJ: Asset farming power not bigger then 0") | |
493 | 490 | } | |
494 | 491 | } | |
495 | 492 | else throw("Strict value is not equal to itself.") | |
496 | 493 | } | |
497 | 494 | ||
498 | 495 | ||
499 | 496 | ||
500 | - | @Callable( | |
497 | + | @Callable(ay) | |
501 | 498 | func claimReward (ap) = { | |
502 | - | let | |
503 | - | if (( | |
499 | + | let aC = A() | |
500 | + | if ((aC == aC)) | |
504 | 501 | then { | |
505 | - | let e = if (( | |
506 | - | then toString( | |
507 | - | else toString( | |
502 | + | let e = if ((ay.originCaller == v())) | |
503 | + | then toString(ay.caller) | |
504 | + | else toString(ay.originCaller) | |
508 | 505 | if (E(e)) | |
509 | - | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
506 | + | then throw("FCR: Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
510 | 507 | else { | |
511 | 508 | let R = fromBase58String(ap) | |
512 | 509 | let ah = Y(e, ap) | |
513 | - | let | |
514 | - | let | |
510 | + | let aT = ag(e, ap, ah) | |
511 | + | let aU = (aT + B((((("address_" + e) + "_asset_") + ap) + "_lastCheckFarmedAmount"))) | |
515 | 512 | let as = B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) | |
516 | - | let | |
517 | - | if ((0 >= | |
518 | - | then throw("you have no EGGs to withdraw") | |
519 | - | else $Tuple2([IntegerEntry((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount"), (B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) + ( | |
513 | + | let aV = ((aU - as) / (b * 100)) | |
514 | + | if ((0 >= aV)) | |
515 | + | then throw("FCR: you have no EGGs to withdraw") | |
516 | + | else $Tuple2([IntegerEntry((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount"), (B((((("address_" + e) + "_asset_") + ap) + "_withdrawnAmount")) + (aV * c))), ScriptTransfer(Address(fromBase58String(e)), (aV * 1000000), k())], (aV * 1000000)) | |
520 | 517 | } | |
521 | 518 | } | |
522 | 519 | else throw("Strict value is not equal to itself.") | |
523 | 520 | } | |
524 | 521 | ||
525 | 522 |
github/deemru/w8io/0e76f2f 140.74 ms ◑