tx · EWD4PHWUFdr3FsswiLSSCeXuzpbeGD9c5GaEpAhFD9yy 3P36HH7i6BBuuNp7FHQd6WX8gzfogi778i6: -0.01000000 Waves 2022.08.11 11:38 [3245077] smart account 3P36HH7i6BBuuNp7FHQd6WX8gzfogi778i6 > SELF 0.00000000 Waves
{ "type": 13, "id": "EWD4PHWUFdr3FsswiLSSCeXuzpbeGD9c5GaEpAhFD9yy", "fee": 1000000, "feeAssetId": null, "timestamp": 1660207131772, "version": 2, "chainId": 87, "sender": "3P36HH7i6BBuuNp7FHQd6WX8gzfogi778i6", "senderPublicKey": "3xRzVfzGz2mW1Y3XAqQwVN4RiiWSgAHpLFmaF24hhfY9", "proofs": [ "3bd1qSyeM85UsYnnPQQCrrquGQWtCkyKiLLFaKF7k74iwtEvQWeW23NYPwYRLjWkjZSP9SgejkP6FLMY6326JNm9" ], "script": "base64:BgIUCAISAwoBCBIECgIICBIDCgEIEgAUARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAARV0cnlHZXRJbnRlZ2VyRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEMdHJ5R2V0U3RyaW5nAQNrZXkJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIFBHRoaXMFA2tleQEJZ2V0T3JhY2xlAAkBB0FkZHJlc3MBCQDZBAEJAQx0cnlHZXRTdHJpbmcBAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwEPZ2V0U3BpY2VBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAITc3RhdGljX3NwaWNlQXNzZXRJZAERZ2V0QnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACFXN0YXRpY19icmVlZGVyQWRkcmVzcwANRFVDS0xJTkdQUklDRQCAoJSljR0AFktHbG9iYWxJc3N1ZWRUaW1lc3RhbXACF2dsb2JhbF9pc3N1ZWRfdGltZXN0YW1wAQxrZXlUb3RhbEZlZWQBCmR1Y2tsaW5nSWQJAKwCAgkArAICAglkdWNrbGluZ18FCmR1Y2tsaW5nSWQCBV9mZWVkARtrZXlEdWNrbGluZ0ZlZExhc3RUaW1lc3RhbXABCmR1Y2tsaW5nSWQJAKwCAgkArAICAglkdWNrbGluZ18FCmR1Y2tsaW5nSWQCCl9mZWRMYXN0VHMBEGtleUR1Y2tsaW5nTGV2ZWwBCmR1Y2tsaW5nSWQJAKwCAgkArAICAglkdWNrbGluZ18FCmR1Y2tsaW5nSWQCBl9sZXZlbAEQa2V5RHVja2xpbmdHcm93bgEKZHVja2xpbmdJZAkArAICCQCsAgICCWR1Y2tsaW5nXwUKZHVja2xpbmdJZAIGX2dyb3duARJrZXlTdGFydFBlcmNlbnRhZ2UBCmR1Y2tsaW5nSWQJAKwCAgkArAICAglkdWNrbGluZ18FCmR1Y2tsaW5nSWQCEF9zdGFydFBlcmNlbnRhZ2UBCGtleU93bmVyAQpkdWNrbGluZ0lkCQCsAgIJAKwCAgIJZHVja2xpbmdfBQpkdWNrbGluZ0lkAgZfb3duZXIBDXRyeUdldEludGVnZXIBA2tleQQDdmFsBAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAUDdmFsAQdnZXRCb29sAQNrZXkEByRtYXRjaDAJAJsIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHARJnZXRDdXJyZW50TGV2ZWxJbnQBCmR1Y2tsaW5nSWQECmtEdWNrTGV2ZWwJARBrZXlEdWNrbGluZ0xldmVsAQUKZHVja2xpbmdJZAQHJG1hdGNoMAkAoggBBQprRHVja0xldmVsAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkBDXBhcnNlSW50VmFsdWUBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQEAXUFByRtYXRjaDAAAAkAAgECHUJHQ0xCSTogV2VpcmQgdmFsdWUgZGV0ZWN0ZWQhARNnZXRMYXN0RmVkVGltZXN0YW1wAQpkdWNrbGluZ0lkBBBsYXN0RmVkVGltZXN0YW1wCQENdHJ5R2V0SW50ZWdlcgEJARtrZXlEdWNrbGluZ0ZlZExhc3RUaW1lc3RhbXABBQpkdWNrbGluZ0lkAwkAZgIFEGxhc3RGZWRUaW1lc3RhbXAAAAUQbGFzdEZlZFRpbWVzdGFtcAgFCWxhc3RCbG9jawl0aW1lc3RhbXABGWNhbGN1bGF0ZU5ld0R1Y2tsaW5nTGV2ZWwCCmR1Y2tsaW5nSWQNcGF5bWVudEFtb3VudAQJY3VycmVudFRzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQXbGFzdEZlZFRpbWVzdGFtcENoZWNrZWQJARNnZXRMYXN0RmVkVGltZXN0YW1wAQUKZHVja2xpbmdJZAQHZmVkRGlmZgkAZQIFCWN1cnJlbnRUcwUXbGFzdEZlZFRpbWVzdGFtcENoZWNrZWQEBmdyb3d0aAUNcGF5bWVudEFtb3VudAQMY3VycmVudExldmVsCQESZ2V0Q3VycmVudExldmVsSW50AQUKZHVja2xpbmdJZAQIbmV3TGV2ZWwJAGQCBQxjdXJyZW50TGV2ZWwFDXBheW1lbnRBbW91bnQDCQBnAgUIbmV3TGV2ZWwFDURVQ0tMSU5HUFJJQ0UJAAIBCQCsAgIJAKwCAgIyQ0JEQjogWW91IGFyZSBmZWVkaW5nIHlvdXIgZHVja2xpbmcgdG8gbXVjaCEgT25seSAJAKQDAQkAZQIFDURVQ0tMSU5HUFJJQ0UFDGN1cnJlbnRMZXZlbAIHbmVlZGVkIQQGcmVzdWx0CQCkAwEFCG5ld0xldmVsCQCUCgIFBnJlc3VsdAkAzAgCCQCsAgICDWN1cnJlbnRMZXZlbD0JAKQDAQUMY3VycmVudExldmVsCQDMCAIJAKwCAgIJbmV3TGV2ZWw9CQCkAwEFCG5ld0xldmVsCQDMCAIJAKwCAgIHZ3Jvd3RoPQkApAMBBQZncm93dGgJAMwIAgkArAICAgpsYXN0RmVkVHM9CQCkAwEFF2xhc3RGZWRUaW1lc3RhbXBDaGVja2VkCQDMCAIJAKwCAgIIZmVkRGlmZj0JAKQDAQUHZmVkRGlmZgUDbmlsAQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAh5CQUk6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQEAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIPQkNPOiBhZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19vcmFjbGVBZGRyZXNzBQZvcmFjbGUFA25pbAFpAQ1pc3N1ZUR1Y2tsaW5nAgdhZGRyZXNzB3R4SWRTdHIDCQECIT0CCAUBaQZjYWxsZXIJARFnZXRCcmVlZGVyQWRkcmVzcwAJAAIBAiNCSUZEOiBZb3UgY2FuJ3QgaXNzdWUgZnJlZSBkdWNrbGluZwQFYXNzZXQJAMMIBwIQQkFCWS0xMTExMTExMS1IWgIAAAEAAAcFBHVuaXQFBmhlaWdodAQHYXNzZXRJZAkAuAgBBQVhc3NldAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MCAV8FB3R4SWRTdHICA19kaQkA2AQBBQdhc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgxzdGF0c19hbW91bnQJAGQCCQENdHJ5R2V0SW50ZWdlcgECDHN0YXRzX2Ftb3VudAABCQDMCAIJAQxCb29sZWFuRW50cnkCCQCsAgIJAKwCAgIJZHVja2xpbmdfCQDYBAEFB2Fzc2V0SWQCEV9pc3N1ZWRCeUZlZWRDYWxsCQAAAggFAWkGY2FsbGVyBQR0aGlzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5U3RhcnRQZXJjZW50YWdlAQkA2AQBBQdhc3NldElkAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCGtleU93bmVyAQkA2AQBBQdhc3NldElkBQdhZGRyZXNzCQDMCAIFBWFzc2V0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQV2YWx1ZQEJAKYIAQUHYWRkcmVzcwABBQdhc3NldElkBQNuaWwJANgEAQUHYXNzZXRJZAFpAQxmZWVkRHVja2xpbmcBCmR1Y2tsaW5nSWQEDWFkZHJlc3NTdHJpbmcJAKUIAQgFAWkGY2FsbGVyBA5yZWFsRHVja2xpbmdJZAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQECIT0CCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQ9nZXRTcGljZUFzc2V0SWQACQACAQIuQkZEOiBCYWQgcGF5bWVudCBhdHRhY2hlZCAoYXNzZXRbc10gb3IgYW1vdW50KQMJAQdnZXRCb29sAQkBEGtleUR1Y2tsaW5nR3Jvd24BBQpkdWNrbGluZ0lkCQACAQIeQkZEOiBEdWNrbGluZyBpcyBhbHJlYWR5IGdyb3duAwkAAAIFCmR1Y2tsaW5nSWQCAAkAAgECI0JGRDogUGxlYXNlIGhhdGNoIGEgZHVja2xpbmcgZmlyc3QhBA1kdWNrbGluZ093bmVyCQEMdHJ5R2V0U3RyaW5nAQkBCGtleU93bmVyAQUKZHVja2xpbmdJZAQPZHVja2xpbmdJZENoZWNrCQEFdmFsdWUBCQDsBwEJANkEAQUKZHVja2xpbmdJZAMJAQIhPQIJAPAHAggFAWkGY2FsbGVyCAUPZHVja2xpbmdJZENoZWNrAmlkAAEJAAIBAilCRkQ6IFlvdSdyZSBub3QgdGhlIG93bmVyIG9mIHRoZSBkdWNrbGluZwMJAQIhPQIFDWR1Y2tsaW5nT3duZXIJAKUIAQgFAWkGY2FsbGVyCQACAQI+QkZEOiBZb3UgY2FuIG9ubHkgZmVlZCBkdWNrbGluZ3MgdGhhdCB5b3Ugd29uL2JvdWdodCB5b3Vyc2VsZiEDCQECIT0CCAUPZHVja2xpbmdJZENoZWNrBmlzc3VlcgUEdGhpcwkAAgECJEJGRDogQ2FudCBmaW5kIGR1Y2tsaW5nIHdpdGggc3VjaCBpZAQQZHVja2xpbmdJZFN0cmluZwkA2AQBCAUPZHVja2xpbmdJZENoZWNrAmlkBRBkdWNrbGluZ0lkU3RyaW5nBBJrRHVja2xpbmdMYXN0RmVkVHMJARtrZXlEdWNrbGluZ0ZlZExhc3RUaW1lc3RhbXABBQpkdWNrbGluZ0lkBA5jdXJyZW50UGF5bWVudAgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECWtOZXdMZXZlbAkBEGtleUR1Y2tsaW5nTGV2ZWwBBQ5yZWFsRHVja2xpbmdJZAQKa1RvdGFsRmVlZAkBDGtleVRvdGFsRmVlZAEFDnJlYWxEdWNrbGluZ0lkBAl0b3RhbEZlZWQJAQ10cnlHZXRJbnRlZ2VyAQUKa1RvdGFsRmVlZAQMa0ZlZWRUeFN0YXRzCQCsAgIJAKwCAgkArAICAglkdWNrbGluZ18FDnJlYWxEdWNrbGluZ0lkAgZfc3RhdF8JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEEGNhbGN1bGF0ZVJlc3VsdHMJARljYWxjdWxhdGVOZXdEdWNrbGluZ0xldmVsAgUOcmVhbER1Y2tsaW5nSWQFDmN1cnJlbnRQYXltZW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrRHVja2xpbmdMYXN0RmVkVHMIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprVG90YWxGZWVkCQBkAgUJdG90YWxGZWVkBQ5jdXJyZW50UGF5bWVudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa0ZlZWRUeFN0YXRzBQ5jdXJyZW50UGF5bWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQlrTmV3TGV2ZWwIBRBjYWxjdWxhdGVSZXN1bHRzAl8xCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUMa0ZlZWRUeFN0YXRzAgZfZGVidWcJALkJAggFEGNhbGN1bGF0ZVJlc3VsdHMCXzICATsFA25pbAFpARR0dXJuRHVja2xpbmdJbnRvRHVjawADCQECIT0CCAUBaQZjYWxsZXIJARFnZXRCcmVlZGVyQWRkcmVzcwAJAAIBAh1CSUZEOiBZb3UgY2FuJ3QgdHVybiBkdWNrbGluZwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQUbGFzdElzc3VlZER1Y2tsaW5nVHMJAQ10cnlHZXRJbnRlZ2VyAQUWS0dsb2JhbElzc3VlZFRpbWVzdGFtcAQLZml2ZU1pbkluTXMJAGgCCQBoAgABADwA6AcECHRpbWVEaWZmCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAJAGQCBRRsYXN0SXNzdWVkRHVja2xpbmdUcwULZml2ZU1pbkluTXMDAwkAZgIFFGxhc3RJc3N1ZWREdWNrbGluZ1RzAAAJAGYCAAAFCHRpbWVEaWZmBwkAAgEJAKwCAgkArAICAkJCVEQ6IENhbiBpc3N1ZSBkdWNrbGluZ3Mgb25seSBvbmNlIHBlciAxIG1pbnV0ZXMsIHBsZWFzZSB3YWl0IGZvciAJAKQDAQkAawMFCHRpbWVEaWZmAAEA6AcCBSBzZWMuAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIuQlREOiBCYWQgcGF5bWVudCBhdHRhY2hlZCAoYXNzZXRbc10gb3IgYW1vdW50KQQDcG10CQEFdmFsdWUBCQDsBwEJAQV2YWx1ZQEICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAMJAGYCBQ1EVUNLTElOR1BSSUNFCQESZ2V0Q3VycmVudExldmVsSW50AQkA2AQBCAUDcG10AmlkCQACAQIhQlREOiBEdWNrbGluZyBpcyBub3QgZ3Jvd24geWV0Li4uAwkBAiE9AggFA3BtdAZpc3N1ZXIFBHRoaXMJAAIBAipCVEQ6IENhbiB1c2Ugb25seSBkdWNrbGluZ3MgZnJvbSB0aGlzIGRBcHAEDmtEdWNrbGluZ0dyb3duCQEQa2V5RHVja2xpbmdHcm93bgEJANgEAQgFA3BtdAJpZAkAlAoCCQDMCAIJAQxCb29sZWFuRW50cnkCBQ5rRHVja2xpbmdHcm93bgYJAMwIAgkBDEludGVnZXJFbnRyeQIFFktHbG9iYWxJc3N1ZWRUaW1lc3RhbXAIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQNuaWwJANgEAQgFA3BtdAJpZAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXnKTxSH", "height": 3245077, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7JByiCnT4eQHMio6XAXjaeqe22Ayd6JjRMFrQGZcmUAn Next: CQpDCC4ud46YsG5CFNfv2V1WT2zdxGx6YxMFNNFjHS4L Diff:
Old | New | Differences | |
---|---|---|---|
90 | 90 | let z = d | |
91 | 91 | parseIntValue(z) | |
92 | 92 | } | |
93 | - | else throw("BGCLBI: Weird value detected!") | |
93 | + | else if ($isInstanceOf(d, "Unit")) | |
94 | + | then { | |
95 | + | let A = d | |
96 | + | 0 | |
97 | + | } | |
98 | + | else throw("BGCLBI: Weird value detected!") | |
94 | 99 | } | |
95 | 100 | ||
96 | 101 | ||
97 | - | func | |
98 | - | let | |
99 | - | if (( | |
100 | - | then | |
102 | + | func B (o) = { | |
103 | + | let C = u(p(o)) | |
104 | + | if ((C > 0)) | |
105 | + | then C | |
101 | 106 | else lastBlock.timestamp | |
102 | 107 | } | |
103 | 108 | ||
104 | 109 | ||
105 | - | func | |
106 | - | let | |
107 | - | let | |
108 | - | let | |
109 | - | let | |
110 | - | let | |
111 | - | let | |
112 | - | if (( | |
113 | - | then throw((("CBDB: You are feeding your duckling to much! Only " + toString((l - | |
110 | + | func D (o,E) = { | |
111 | + | let F = lastBlock.timestamp | |
112 | + | let G = B(o) | |
113 | + | let H = (F - G) | |
114 | + | let I = E | |
115 | + | let J = x(o) | |
116 | + | let K = (J + E) | |
117 | + | if ((K >= l)) | |
118 | + | then throw((("CBDB: You are feeding your duckling to much! Only " + toString((l - J))) + "needed!")) | |
114 | 119 | else { | |
115 | - | let | |
116 | - | $Tuple2( | |
120 | + | let L = toString(K) | |
121 | + | $Tuple2(L, [("currentLevel=" + toString(J)), ("newLevel=" + toString(K)), ("growth=" + toString(I)), ("lastFedTs=" + toString(G)), ("fedDiff=" + toString(H))]) | |
117 | 122 | } | |
118 | 123 | } | |
119 | 124 | ||
120 | 125 | ||
121 | - | func | |
122 | - | let d = | |
126 | + | func M (N) = { | |
127 | + | let d = N | |
123 | 128 | if ($isInstanceOf(d, "Int")) | |
124 | 129 | then { | |
125 | - | let | |
126 | - | | |
130 | + | let O = d | |
131 | + | O | |
127 | 132 | } | |
128 | 133 | else throw("BAI: wrong type, expected: Int") | |
129 | 134 | } | |
130 | 135 | ||
131 | 136 | ||
132 | - | @Callable( | |
133 | - | func configureOracle ( | |
137 | + | @Callable(P) | |
138 | + | func configureOracle (Q) = if ((P.caller != this)) | |
134 | 139 | then throw("BCO: admin only") | |
135 | - | else [StringEntry("static_oracleAddress", | |
140 | + | else [StringEntry("static_oracleAddress", Q)] | |
136 | 141 | ||
137 | 142 | ||
138 | 143 | ||
139 | - | @Callable( | |
140 | - | func issueDuckling (b, | |
144 | + | @Callable(P) | |
145 | + | func issueDuckling (b,R) = if ((P.caller != k())) | |
141 | 146 | then throw("BIFD: You can't issue free duckling") | |
142 | 147 | else { | |
143 | - | let | |
144 | - | let | |
145 | - | $Tuple2([StringEntry((((b + "_") + | |
148 | + | let S = Issue("BABY-11111111-HZ", "", 1, 0, false, unit, height) | |
149 | + | let T = calculateAssetId(S) | |
150 | + | $Tuple2([StringEntry((((b + "_") + R) + "_di"), toBase58String(T)), IntegerEntry("stats_amount", (u("stats_amount") + 1)), BooleanEntry((("duckling_" + toBase58String(T)) + "_issuedByFeedCall"), (P.caller == this)), IntegerEntry(s(toBase58String(T)), 0), StringEntry(t(toBase58String(T)), b), S, ScriptTransfer(value(addressFromString(b)), 1, T)], toBase58String(T)) | |
146 | 151 | } | |
147 | 152 | ||
148 | 153 | ||
149 | 154 | ||
150 | - | @Callable( | |
155 | + | @Callable(P) | |
151 | 156 | func feedDuckling (o) = { | |
152 | - | let | |
153 | - | let | |
157 | + | let U = toString(P.caller) | |
158 | + | let V = if (if ((size(P.payments) != 1)) | |
154 | 159 | then true | |
155 | - | else (value( | |
160 | + | else (value(P.payments[0]).assetId != j())) | |
156 | 161 | then throw("BFD: Bad payment attached (asset[s] or amount)") | |
157 | 162 | else if (w(r(o))) | |
158 | 163 | then throw("BFD: Duckling is already grown") | |
159 | 164 | else if ((o == "")) | |
160 | 165 | then throw("BFD: Please hatch a duckling first!") | |
161 | 166 | else { | |
162 | - | let | |
163 | - | let | |
164 | - | if ((assetBalance( | |
167 | + | let W = h(t(o)) | |
168 | + | let X = value(assetInfo(fromBase58String(o))) | |
169 | + | if ((assetBalance(P.caller, X.id) != 1)) | |
165 | 170 | then throw("BFD: You're not the owner of the duckling") | |
166 | - | else if (( | |
171 | + | else if ((W != toString(P.caller))) | |
167 | 172 | then throw("BFD: You can only feed ducklings that you won/bought yourself!") | |
168 | - | else if (( | |
173 | + | else if ((X.issuer != this)) | |
169 | 174 | then throw("BFD: Cant find duckling with such id") | |
170 | 175 | else { | |
171 | - | let | |
172 | - | | |
176 | + | let Y = toBase58String(X.id) | |
177 | + | Y | |
173 | 178 | } | |
174 | 179 | } | |
175 | - | let | |
176 | - | let | |
177 | - | let | |
178 | - | let | |
179 | - | let | |
180 | - | let | |
181 | - | let | |
182 | - | [IntegerEntry( | |
180 | + | let Z = p(o) | |
181 | + | let aa = value(P.payments[0]).amount | |
182 | + | let ab = q(V) | |
183 | + | let ac = n(V) | |
184 | + | let ad = u(ac) | |
185 | + | let ae = ((("duckling_" + V) + "_stat_") + toString(lastBlock.timestamp)) | |
186 | + | let af = D(V, aa) | |
187 | + | [IntegerEntry(Z, lastBlock.timestamp), IntegerEntry(ac, (ad + aa)), IntegerEntry(ae, aa), StringEntry(ab, af._1), StringEntry((ae + "_debug"), makeString(af._2, ";"))] | |
183 | 188 | } | |
184 | 189 | ||
185 | 190 | ||
186 | 191 | ||
187 | - | @Callable( | |
188 | - | func turnDucklingIntoDuck () = if (( | |
192 | + | @Callable(P) | |
193 | + | func turnDucklingIntoDuck () = if ((P.caller != k())) | |
189 | 194 | then throw("BIFD: You can't turn duckling") | |
190 | 195 | else { | |
191 | - | let b = toString( | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | if (if (( | |
197 | - | then (0 > | |
196 | + | let b = toString(P.caller) | |
197 | + | let ag = toBase58String(P.transactionId) | |
198 | + | let ah = u(m) | |
199 | + | let ai = ((1 * 60) * 1000) | |
200 | + | let aj = (lastBlock.timestamp - (ah + ai)) | |
201 | + | if (if ((ah > 0)) | |
202 | + | then (0 > aj) | |
198 | 203 | else false) | |
199 | - | then throw((("BTD: Can issue ducklings only once per 1 minutes, please wait for " + toString(fraction( | |
200 | - | else if ((size( | |
204 | + | then throw((("BTD: Can issue ducklings only once per 1 minutes, please wait for " + toString(fraction(aj, 1, 1000))) + " sec.")) | |
205 | + | else if ((size(P.payments) != 1)) | |
201 | 206 | then throw("BTD: Bad payment attached (asset[s] or amount)") | |
202 | 207 | else { | |
203 | - | let | |
204 | - | if ((l > x(toBase58String( | |
208 | + | let ak = value(assetInfo(value(value(P.payments[0]).assetId))) | |
209 | + | if ((l > x(toBase58String(ak.id)))) | |
205 | 210 | then throw("BTD: Duckling is not grown yet...") | |
206 | - | else if (( | |
211 | + | else if ((ak.issuer != this)) | |
207 | 212 | then throw("BTD: Can use only ducklings from this dApp") | |
208 | 213 | else { | |
209 | - | let | |
210 | - | $Tuple2([BooleanEntry( | |
214 | + | let al = r(toBase58String(ak.id)) | |
215 | + | $Tuple2([BooleanEntry(al, true), IntegerEntry(m, lastBlock.timestamp)], toBase58String(ak.id)) | |
211 | 216 | } | |
212 | 217 | } | |
213 | 218 | } | |
214 | 219 | ||
215 | 220 | ||
216 | - | @Verifier( | |
217 | - | func | |
221 | + | @Verifier(am) | |
222 | + | func an () = sigVerify(am.bodyBytes, am.proofs[0], am.senderPublicKey) | |
218 | 223 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b,c) = { | |
5 | 5 | let d = getString(b, c) | |
6 | 6 | if ($isInstanceOf(d, "String")) | |
7 | 7 | then { | |
8 | 8 | let e = d | |
9 | 9 | e | |
10 | 10 | } | |
11 | 11 | else "" | |
12 | 12 | } | |
13 | 13 | ||
14 | 14 | ||
15 | 15 | func f (b,c) = { | |
16 | 16 | let d = getInteger(b, c) | |
17 | 17 | if ($isInstanceOf(d, "Int")) | |
18 | 18 | then { | |
19 | 19 | let g = d | |
20 | 20 | g | |
21 | 21 | } | |
22 | 22 | else 0 | |
23 | 23 | } | |
24 | 24 | ||
25 | 25 | ||
26 | 26 | func h (c) = a(this, c) | |
27 | 27 | ||
28 | 28 | ||
29 | 29 | func i () = Address(fromBase58String(h("static_oracleAddress"))) | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | func j () = fromBase58String(a(i(), "static_spiceAssetId")) | |
33 | 33 | ||
34 | 34 | ||
35 | 35 | func k () = Address(fromBase58String(a(i(), "static_breederAddress"))) | |
36 | 36 | ||
37 | 37 | ||
38 | 38 | let l = 1000000000000 | |
39 | 39 | ||
40 | 40 | let m = "global_issued_timestamp" | |
41 | 41 | ||
42 | 42 | func n (o) = (("duckling_" + o) + "_feed") | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func p (o) = (("duckling_" + o) + "_fedLastTs") | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func q (o) = (("duckling_" + o) + "_level") | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | func r (o) = (("duckling_" + o) + "_grown") | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | func s (o) = (("duckling_" + o) + "_startPercentage") | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func t (o) = (("duckling_" + o) + "_owner") | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | func u (c) = { | |
61 | 61 | let v = { | |
62 | 62 | let d = getInteger(this, c) | |
63 | 63 | if ($isInstanceOf(d, "Int")) | |
64 | 64 | then { | |
65 | 65 | let g = d | |
66 | 66 | g | |
67 | 67 | } | |
68 | 68 | else 0 | |
69 | 69 | } | |
70 | 70 | v | |
71 | 71 | } | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | func w (c) = { | |
75 | 75 | let d = getBoolean(this, c) | |
76 | 76 | if ($isInstanceOf(d, "Boolean")) | |
77 | 77 | then { | |
78 | 78 | let g = d | |
79 | 79 | g | |
80 | 80 | } | |
81 | 81 | else false | |
82 | 82 | } | |
83 | 83 | ||
84 | 84 | ||
85 | 85 | func x (o) = { | |
86 | 86 | let y = q(o) | |
87 | 87 | let d = getString(y) | |
88 | 88 | if ($isInstanceOf(d, "String")) | |
89 | 89 | then { | |
90 | 90 | let z = d | |
91 | 91 | parseIntValue(z) | |
92 | 92 | } | |
93 | - | else throw("BGCLBI: Weird value detected!") | |
93 | + | else if ($isInstanceOf(d, "Unit")) | |
94 | + | then { | |
95 | + | let A = d | |
96 | + | 0 | |
97 | + | } | |
98 | + | else throw("BGCLBI: Weird value detected!") | |
94 | 99 | } | |
95 | 100 | ||
96 | 101 | ||
97 | - | func | |
98 | - | let | |
99 | - | if (( | |
100 | - | then | |
102 | + | func B (o) = { | |
103 | + | let C = u(p(o)) | |
104 | + | if ((C > 0)) | |
105 | + | then C | |
101 | 106 | else lastBlock.timestamp | |
102 | 107 | } | |
103 | 108 | ||
104 | 109 | ||
105 | - | func | |
106 | - | let | |
107 | - | let | |
108 | - | let | |
109 | - | let | |
110 | - | let | |
111 | - | let | |
112 | - | if (( | |
113 | - | then throw((("CBDB: You are feeding your duckling to much! Only " + toString((l - | |
110 | + | func D (o,E) = { | |
111 | + | let F = lastBlock.timestamp | |
112 | + | let G = B(o) | |
113 | + | let H = (F - G) | |
114 | + | let I = E | |
115 | + | let J = x(o) | |
116 | + | let K = (J + E) | |
117 | + | if ((K >= l)) | |
118 | + | then throw((("CBDB: You are feeding your duckling to much! Only " + toString((l - J))) + "needed!")) | |
114 | 119 | else { | |
115 | - | let | |
116 | - | $Tuple2( | |
120 | + | let L = toString(K) | |
121 | + | $Tuple2(L, [("currentLevel=" + toString(J)), ("newLevel=" + toString(K)), ("growth=" + toString(I)), ("lastFedTs=" + toString(G)), ("fedDiff=" + toString(H))]) | |
117 | 122 | } | |
118 | 123 | } | |
119 | 124 | ||
120 | 125 | ||
121 | - | func | |
122 | - | let d = | |
126 | + | func M (N) = { | |
127 | + | let d = N | |
123 | 128 | if ($isInstanceOf(d, "Int")) | |
124 | 129 | then { | |
125 | - | let | |
126 | - | | |
130 | + | let O = d | |
131 | + | O | |
127 | 132 | } | |
128 | 133 | else throw("BAI: wrong type, expected: Int") | |
129 | 134 | } | |
130 | 135 | ||
131 | 136 | ||
132 | - | @Callable( | |
133 | - | func configureOracle ( | |
137 | + | @Callable(P) | |
138 | + | func configureOracle (Q) = if ((P.caller != this)) | |
134 | 139 | then throw("BCO: admin only") | |
135 | - | else [StringEntry("static_oracleAddress", | |
140 | + | else [StringEntry("static_oracleAddress", Q)] | |
136 | 141 | ||
137 | 142 | ||
138 | 143 | ||
139 | - | @Callable( | |
140 | - | func issueDuckling (b, | |
144 | + | @Callable(P) | |
145 | + | func issueDuckling (b,R) = if ((P.caller != k())) | |
141 | 146 | then throw("BIFD: You can't issue free duckling") | |
142 | 147 | else { | |
143 | - | let | |
144 | - | let | |
145 | - | $Tuple2([StringEntry((((b + "_") + | |
148 | + | let S = Issue("BABY-11111111-HZ", "", 1, 0, false, unit, height) | |
149 | + | let T = calculateAssetId(S) | |
150 | + | $Tuple2([StringEntry((((b + "_") + R) + "_di"), toBase58String(T)), IntegerEntry("stats_amount", (u("stats_amount") + 1)), BooleanEntry((("duckling_" + toBase58String(T)) + "_issuedByFeedCall"), (P.caller == this)), IntegerEntry(s(toBase58String(T)), 0), StringEntry(t(toBase58String(T)), b), S, ScriptTransfer(value(addressFromString(b)), 1, T)], toBase58String(T)) | |
146 | 151 | } | |
147 | 152 | ||
148 | 153 | ||
149 | 154 | ||
150 | - | @Callable( | |
155 | + | @Callable(P) | |
151 | 156 | func feedDuckling (o) = { | |
152 | - | let | |
153 | - | let | |
157 | + | let U = toString(P.caller) | |
158 | + | let V = if (if ((size(P.payments) != 1)) | |
154 | 159 | then true | |
155 | - | else (value( | |
160 | + | else (value(P.payments[0]).assetId != j())) | |
156 | 161 | then throw("BFD: Bad payment attached (asset[s] or amount)") | |
157 | 162 | else if (w(r(o))) | |
158 | 163 | then throw("BFD: Duckling is already grown") | |
159 | 164 | else if ((o == "")) | |
160 | 165 | then throw("BFD: Please hatch a duckling first!") | |
161 | 166 | else { | |
162 | - | let | |
163 | - | let | |
164 | - | if ((assetBalance( | |
167 | + | let W = h(t(o)) | |
168 | + | let X = value(assetInfo(fromBase58String(o))) | |
169 | + | if ((assetBalance(P.caller, X.id) != 1)) | |
165 | 170 | then throw("BFD: You're not the owner of the duckling") | |
166 | - | else if (( | |
171 | + | else if ((W != toString(P.caller))) | |
167 | 172 | then throw("BFD: You can only feed ducklings that you won/bought yourself!") | |
168 | - | else if (( | |
173 | + | else if ((X.issuer != this)) | |
169 | 174 | then throw("BFD: Cant find duckling with such id") | |
170 | 175 | else { | |
171 | - | let | |
172 | - | | |
176 | + | let Y = toBase58String(X.id) | |
177 | + | Y | |
173 | 178 | } | |
174 | 179 | } | |
175 | - | let | |
176 | - | let | |
177 | - | let | |
178 | - | let | |
179 | - | let | |
180 | - | let | |
181 | - | let | |
182 | - | [IntegerEntry( | |
180 | + | let Z = p(o) | |
181 | + | let aa = value(P.payments[0]).amount | |
182 | + | let ab = q(V) | |
183 | + | let ac = n(V) | |
184 | + | let ad = u(ac) | |
185 | + | let ae = ((("duckling_" + V) + "_stat_") + toString(lastBlock.timestamp)) | |
186 | + | let af = D(V, aa) | |
187 | + | [IntegerEntry(Z, lastBlock.timestamp), IntegerEntry(ac, (ad + aa)), IntegerEntry(ae, aa), StringEntry(ab, af._1), StringEntry((ae + "_debug"), makeString(af._2, ";"))] | |
183 | 188 | } | |
184 | 189 | ||
185 | 190 | ||
186 | 191 | ||
187 | - | @Callable( | |
188 | - | func turnDucklingIntoDuck () = if (( | |
192 | + | @Callable(P) | |
193 | + | func turnDucklingIntoDuck () = if ((P.caller != k())) | |
189 | 194 | then throw("BIFD: You can't turn duckling") | |
190 | 195 | else { | |
191 | - | let b = toString( | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | if (if (( | |
197 | - | then (0 > | |
196 | + | let b = toString(P.caller) | |
197 | + | let ag = toBase58String(P.transactionId) | |
198 | + | let ah = u(m) | |
199 | + | let ai = ((1 * 60) * 1000) | |
200 | + | let aj = (lastBlock.timestamp - (ah + ai)) | |
201 | + | if (if ((ah > 0)) | |
202 | + | then (0 > aj) | |
198 | 203 | else false) | |
199 | - | then throw((("BTD: Can issue ducklings only once per 1 minutes, please wait for " + toString(fraction( | |
200 | - | else if ((size( | |
204 | + | then throw((("BTD: Can issue ducklings only once per 1 minutes, please wait for " + toString(fraction(aj, 1, 1000))) + " sec.")) | |
205 | + | else if ((size(P.payments) != 1)) | |
201 | 206 | then throw("BTD: Bad payment attached (asset[s] or amount)") | |
202 | 207 | else { | |
203 | - | let | |
204 | - | if ((l > x(toBase58String( | |
208 | + | let ak = value(assetInfo(value(value(P.payments[0]).assetId))) | |
209 | + | if ((l > x(toBase58String(ak.id)))) | |
205 | 210 | then throw("BTD: Duckling is not grown yet...") | |
206 | - | else if (( | |
211 | + | else if ((ak.issuer != this)) | |
207 | 212 | then throw("BTD: Can use only ducklings from this dApp") | |
208 | 213 | else { | |
209 | - | let | |
210 | - | $Tuple2([BooleanEntry( | |
214 | + | let al = r(toBase58String(ak.id)) | |
215 | + | $Tuple2([BooleanEntry(al, true), IntegerEntry(m, lastBlock.timestamp)], toBase58String(ak.id)) | |
211 | 216 | } | |
212 | 217 | } | |
213 | 218 | } | |
214 | 219 | ||
215 | 220 | ||
216 | - | @Verifier( | |
217 | - | func | |
221 | + | @Verifier(am) | |
222 | + | func an () = sigVerify(am.bodyBytes, am.proofs[0], am.senderPublicKey) | |
218 | 223 |
github/deemru/w8io/873ac7e 85.60 ms ◑