2023.04.29 15:53 [3621462] smart account 3P8prjYwq9dxRqPiyYAjQpAnuei6eTAerSV > SELF 0.00000000 Waves
{ "type": 13, "id": "BGuSQQyzJsLQo7cqYn6JHSrHq3dhs5QenJ2jHHK2o8r2", "fee": 1000000, "feeAssetId": null, "timestamp": 1682772812536, "version": 2, "chainId": 87, "sender": "3P8prjYwq9dxRqPiyYAjQpAnuei6eTAerSV", "senderPublicKey": "AMyLj8njybNRT5DAz3WKHgzDpgXocT1ojBUcFthRiH6i", "proofs": [ "5RpTn5yrtFqdEiPGDJyXDN1ia448emcsUcA9U9gEWH2XbrbPYnAx7fUMXsgv9x2ZJsYQtn7Co4KSVKMu8ouhPPXo" ], "script": "base64:BgIdCAISAwoBCBIDCgEBEgQKAgEBEgMKAQESBAoCCAEXAAliYXNlUHJpY2UAgIl6AAhpbmNyZWFzZQABABBpbmNyZWFzZURlY2ltYWxzAAMBD2R1Y2tDYXBhY2l0eUtleQEGZHVja0lkCQCsAgICD2FkZGVkX2NhcGFjaXR5XwUGZHVja0lkARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQx0cnlHZXRTdHJpbmcBA2tleQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgUEdGhpcwUDa2V5AQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAhl3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50ARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwACFHN0YXRpY19vcmFjbGVBZGRyZXNzARJzdGF0aWNLZXlfZXh0cmFGZWUAAg9zdGF0aWNfZXh0cmFGZWUBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwACFXN0YXRpY19icmVlZGVyQWRkcmVzcwEVc3RhdGljS2V5X2h1bnRBZGRyZXNzAAISc3RhdGljX2h1bnRBZGRyZXNzARRzdGF0aWNLZXlfZWdnQXNzZXRJZAACEXN0YXRpY19lZ2dBc3NldElkARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgACFHN0YXRpY19mZWVBZ2dyZWdhdG9yAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwEJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwABDWdldEVnZ0Fzc2V0SWQACQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAQ9nZXREdWNrQ2FwYWNpdHkBBmR1Y2tJZAkBDXRyeUdldEludGVnZXIBCQEPZHVja0NhcGFjaXR5S2V5AQUGZHVja0lkARFnZXRCcmVlZGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwABDmdldEh1bnRBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEVc3RhdGljS2V5X2h1bnRBZGRyZXNzAAEQZ2V0RmVlQWdncmVnYXRvcgAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAEMa2V5RHVja093bmVyAQdhc3NldElkCQCsAgIJAKwCAgIFZHVja18FB2Fzc2V0SWQCBl9vd25lcgEGY29tbW9uAwVuZnRJZAdwYXltZW50DWFkZGVkQ2FwYWNpdHkECGNoaWxkcmVuCQEFYXNJbnQBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACFnZhbGlkYXRlQW5kR2V0Q2hpbGRyZW4JAMwIAgUFbmZ0SWQFA25pbAUDbmlsAwkAAAIFCGNoaWxkcmVuBQhjaGlsZHJlbgQKZWdnUGF5bWVudAkBBXZhbHVlAQUHcGF5bWVudAQIY2FwYWNpdHkJAQ9nZXREdWNrQ2FwYWNpdHkBBQVuZnRJZAQNdG90YWxDYXBhY2l0eQkAZAIFCGNhcGFjaXR5BQ1hZGRlZENhcGFjaXR5BARkaWZmCQEFYXNJbnQBCQD8BwQFBHRoaXMCEWNhbGN1bGF0ZURpZmZFZ2dzCQDMCAIFCGNhcGFjaXR5CQDMCAIFDXRvdGFsQ2FwYWNpdHkFA25pbAUDbmlsAwkAAAIFBGRpZmYFBGRpZmYEBmFtb3VudAgFCmVnZ1BheW1lbnQGYW1vdW50AwkBAiE9AggFCmVnZ1BheW1lbnQHYXNzZXRJZAkBDWdldEVnZ0Fzc2V0SWQACQACAQkArAICAkFDQlI6IFlvdSBjYW4gYXR0YWNoIG9ubHkgRUdHIHRva2VucyB3aXRoIHRoZSBmb2xsb3dpbmcgYXNzZXQgaWQ6IAkA2AQBCQENZ2V0RWdnQXNzZXRJZAADCQECIT0CBQZhbW91bnQFBGRpZmYJAAIBCQCsAgICKUNCUjogUGxlYXNlIGF0dGFjaCB0aGUgZXhhY3QgYXNzZXQgYW1vdW50CQCkAwEFBGRpZmYEBWRlYnVnCQC5CQIJAMwIAgkArAICAgxvbGRDYXBhY2l0eT0JAKQDAQUIY2FwYWNpdHkJAMwIAgkArAICAgxuZXdDYXBhY2l0eT0JAKQDAQUNdG90YWxDYXBhY2l0eQkAzAgCCQCsAgICDWRpZmZDYXBhY2l0eT0JAKQDAQUNYWRkZWRDYXBhY2l0eQkAzAgCCQCsAgICCWRpZmZQYWlkPQkApAMBBQRkaWZmBQNuaWwCATsJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9kdWNrQ2FwYWNpdHlLZXkBBQVuZnRJZAUNdG90YWxDYXBhY2l0eQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkBD2R1Y2tDYXBhY2l0eUtleQEFBW5mdElkAgdfZGVidWdfCQCkAwEFBmhlaWdodAUFZGVidWcFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEHcGF5bWVudAMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQACAQIZQ0NBUDogUGxlYXNlIGF0dGFjaCB3YXZlcwQJZmVlQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCCQEJZ2V0T3JhY2xlAAkBEnN0YXRpY0tleV9leHRyYUZlZQADCQECIT0CCAUHcGF5bWVudAZhbW91bnQFCWZlZUFtb3VudAkAAgEJAKwCAgkArAICAhxDQ0FQOiBQbGVhc2UgYXR0YWNoIGV4YWN0bHkgCQCkAwEFCWZlZUFtb3VudAITIGFtb3VudCBvZiB3YXZlbGV0cwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEQZ2V0RmVlQWdncmVnYXRvcgAFCWZlZUFtb3VudAUEdW5pdAUDbmlsBQFpAQ9jb25maWd1cmVPcmFjbGUBBm9yYWNsZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECD0NDTzogYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCCQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MABQZvcmFjbGUFA25pbAFpARdjYWxjdWxhdGVUb3RhbFByaWNlRWdncwEEZWdncwQHcG93UGFydAkAZQIJAGwGCQBkAgDoBwUIaW5jcmVhc2UFEGluY3JlYXNlRGVjaW1hbHMJAGQCBQRlZ2dzAAEAAAAIBQZIQUxGVVAAgMLXLwQFcHJpY2UJAGkCCQBpAgkAaAIFCWJhc2VQcmljZQUHcG93UGFydAUIaW5jcmVhc2UAoI0GCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIWUFJJQ0VfQ0FMQ1VMQVRJT05fUE9XXwkApAMBBQRlZ2dzBQdwb3dQYXJ0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICElBSSUNFX0NBTENVTEFUSU9OXwkApAMBBQRlZ2dzBQVwcmljZQUDbmlsBQVwcmljZQFpARFjYWxjdWxhdGVEaWZmRWdncwIHb2xkRWdncwduZXdFZ2dzBAthbHJlYWR5UGFpZAkBBWFzSW50AQkA/AcEBQR0aGlzAhdjYWxjdWxhdGVUb3RhbFByaWNlRWdncwkAzAgCBQdvbGRFZ2dzBQNuaWwFA25pbAMJAAACBQthbHJlYWR5UGFpZAULYWxyZWFkeVBhaWQECnRvdGFsVG9QYXkJAQVhc0ludAEJAPwHBAUEdGhpcwIXY2FsY3VsYXRlVG90YWxQcmljZUVnZ3MJAMwIAgUHbmV3RWdncwUDbmlsBQNuaWwDCQAAAgUKdG90YWxUb1BheQUKdG90YWxUb1BheQQEZGlmZgkAZQIFCnRvdGFsVG9QYXkFC2FscmVhZHlQYWlkBAVkZWJ1ZwkAuQkCCQDMCAIJAKwCAgIIb2xkUGFpZD0JAKQDAQULYWxyZWFkeVBhaWQJAMwIAgkArAICAghuZXdQYWlkPQkApAMBBQp0b3RhbFRvUGF5BQNuaWwCATsJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCAhJERUJVR19DQUxDVUxBVElPTlMFBWRlYnVnBQNuaWwFBGRpZmYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERYWRkQ2FwYWNpdHlUb0R1Y2sBDWFkZGVkQ2FwYWNpdHkECm5mdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAQQLZHVja0Fzc2V0SWQJANgEAQkBBXZhbHVlAQgFCm5mdFBheW1lbnQHYXNzZXRJZAMJAQIhPQIIBQpuZnRQYXltZW50BmFtb3VudAABCQACAQITTkZUIGlzIG5vdCBhdHRhY2hlZAkAzggCCQDOCAIJAQZjb21tb24DBQtkdWNrQXNzZXRJZAkAkQMCCAUBaQhwYXltZW50cwABBQ1hZGRlZENhcGFjaXR5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQEFdmFsdWUBCAUKbmZ0UGF5bWVudAdhc3NldElkBQNuaWwFDHZhbGlkUGF5bWVudAFpARdhZGRDYXBhY2l0eVRvRHVja0luSHVudAIFbmZ0SWQNYWRkZWRDYXBhY2l0eQQLb3duZXJJbkh1bnQJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQ5nZXRIdW50QWRkcmVzcwAJAQxrZXlEdWNrT3duZXIBBQVuZnRJZAQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAQMJAQIhPQIFC293bmVySW5IdW50CQClCAEIBQFpBmNhbGxlcgkAAgECLENCUjogWW91IGNhbiBvbmx5IGFkZCBjYXBhY2l0eSB0byBvd24gZHVja3MhCQDOCAIJAQZjb21tb24DBQVuZnRJZAkAkQMCCAUBaQhwYXltZW50cwAABQ1hZGRlZENhcGFjaXR5BQx2YWxpZFBheW1lbnQAPRVWdA==", "height": 3621462, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DQJrsU59Uxn7wM9hq5EAzDbswsAW3LEjvcNeDCCiagaM Next: A8gT881kzXP7u2zoSzjL8XrmLirbGnQTfuyQY9AE9Ar Diff:
Old | New | Differences | |
---|---|---|---|
37 | 37 | } | |
38 | 38 | ||
39 | 39 | ||
40 | - | func | |
40 | + | func staticKey_oracleAddress () = "static_oracleAddress" | |
41 | 41 | ||
42 | 42 | ||
43 | - | func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId")) | |
43 | + | func staticKey_extraFee () = "static_extraFee" | |
44 | + | ||
45 | + | ||
46 | + | func staticKey_breederAddress () = "static_breederAddress" | |
47 | + | ||
48 | + | ||
49 | + | func staticKey_huntAddress () = "static_huntAddress" | |
50 | + | ||
51 | + | ||
52 | + | func staticKey_eggAssetId () = "static_eggAssetId" | |
53 | + | ||
54 | + | ||
55 | + | func staticKey_feeAggregator () = "static_feeAggregator" | |
56 | + | ||
57 | + | ||
58 | + | func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress()))) | |
59 | + | ||
60 | + | ||
61 | + | func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId())) | |
44 | 62 | ||
45 | 63 | ||
46 | 64 | func getDuckCapacity (duckId) = tryGetInteger(duckCapacityKey(duckId)) | |
47 | 65 | ||
48 | 66 | ||
49 | - | func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), | |
67 | + | func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress()))) | |
50 | 68 | ||
51 | 69 | ||
52 | - | func getHuntAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_huntAddress"))) | |
70 | + | func getHuntAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_huntAddress()))) | |
71 | + | ||
72 | + | ||
73 | + | func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator()))) | |
53 | 74 | ||
54 | 75 | ||
55 | 76 | func keyDuckOwner (assetId) = (("duck_" + assetId) + "_owner") | |
81 | 102 | } | |
82 | 103 | ||
83 | 104 | ||
105 | + | func checkAdditionalPayment (payment) = if (isDefined(payment.assetId)) | |
106 | + | then throw("CCAP: Please attach waves") | |
107 | + | else { | |
108 | + | let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee()) | |
109 | + | if ((payment.amount != feeAmount)) | |
110 | + | then throw((("CCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets")) | |
111 | + | else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)] | |
112 | + | } | |
113 | + | ||
114 | + | ||
84 | 115 | @Callable(i) | |
85 | 116 | func configureOracle (oracle) = if ((i.caller != this)) | |
86 | 117 | then throw("CCO: admin only") | |
87 | - | else [StringEntry( | |
118 | + | else [StringEntry(staticKey_oracleAddress(), oracle)] | |
88 | 119 | ||
89 | 120 | ||
90 | 121 | ||
119 | 150 | @Callable(i) | |
120 | 151 | func addCapacityToDuck (addedCapacity) = { | |
121 | 152 | let nftPayment = value(i.payments[0]) | |
153 | + | let validPayment = checkAdditionalPayment(i.payments[1]) | |
122 | 154 | let duckAssetId = toBase58String(value(nftPayment.assetId)) | |
123 | 155 | if ((nftPayment.amount != 1)) | |
124 | 156 | then throw("NFT is not attached") | |
125 | - | else (common(duckAssetId, i.payments[1], addedCapacity) ++ [ScriptTransfer(i.caller, 1, value(nftPayment.assetId))]) | |
157 | + | else ((common(duckAssetId, i.payments[1], addedCapacity) ++ [ScriptTransfer(i.caller, 1, value(nftPayment.assetId))]) ++ validPayment) | |
126 | 158 | } | |
127 | 159 | ||
128 | 160 | ||
130 | 162 | @Callable(i) | |
131 | 163 | func addCapacityToDuckInHunt (nftId,addedCapacity) = { | |
132 | 164 | let ownerInHunt = tryGetStringExternal(getHuntAddress(), keyDuckOwner(nftId)) | |
165 | + | let validPayment = checkAdditionalPayment(i.payments[1]) | |
133 | 166 | if ((ownerInHunt != toString(i.caller))) | |
134 | 167 | then throw("CBR: You can only add capacity to own ducks!") | |
135 | - | else common(nftId, i.payments[0], addedCapacity) | |
168 | + | else (common(nftId, i.payments[0], addedCapacity) ++ validPayment) | |
136 | 169 | } | |
137 | 170 | ||
138 | 171 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let basePrice = 2000000 | |
5 | 5 | ||
6 | 6 | let increase = 1 | |
7 | 7 | ||
8 | 8 | let increaseDecimals = 3 | |
9 | 9 | ||
10 | 10 | func duckCapacityKey (duckId) = ("added_capacity_" + duckId) | |
11 | 11 | ||
12 | 12 | ||
13 | 13 | func tryGetStringExternal (address,key) = match getString(address, key) { | |
14 | 14 | case a: String => | |
15 | 15 | a | |
16 | 16 | case _ => | |
17 | 17 | "" | |
18 | 18 | } | |
19 | 19 | ||
20 | 20 | ||
21 | 21 | func tryGetString (key) = tryGetStringExternal(this, key) | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func tryGetInteger (key) = match getInteger(this, key) { | |
25 | 25 | case b: Int => | |
26 | 26 | b | |
27 | 27 | case _ => | |
28 | 28 | 0 | |
29 | 29 | } | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | func asInt (value) = match value { | |
33 | 33 | case int: Int => | |
34 | 34 | int | |
35 | 35 | case _ => | |
36 | 36 | throw("wrong type, expected: Int") | |
37 | 37 | } | |
38 | 38 | ||
39 | 39 | ||
40 | - | func | |
40 | + | func staticKey_oracleAddress () = "static_oracleAddress" | |
41 | 41 | ||
42 | 42 | ||
43 | - | func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId")) | |
43 | + | func staticKey_extraFee () = "static_extraFee" | |
44 | + | ||
45 | + | ||
46 | + | func staticKey_breederAddress () = "static_breederAddress" | |
47 | + | ||
48 | + | ||
49 | + | func staticKey_huntAddress () = "static_huntAddress" | |
50 | + | ||
51 | + | ||
52 | + | func staticKey_eggAssetId () = "static_eggAssetId" | |
53 | + | ||
54 | + | ||
55 | + | func staticKey_feeAggregator () = "static_feeAggregator" | |
56 | + | ||
57 | + | ||
58 | + | func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress()))) | |
59 | + | ||
60 | + | ||
61 | + | func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId())) | |
44 | 62 | ||
45 | 63 | ||
46 | 64 | func getDuckCapacity (duckId) = tryGetInteger(duckCapacityKey(duckId)) | |
47 | 65 | ||
48 | 66 | ||
49 | - | func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), | |
67 | + | func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress()))) | |
50 | 68 | ||
51 | 69 | ||
52 | - | func getHuntAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_huntAddress"))) | |
70 | + | func getHuntAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_huntAddress()))) | |
71 | + | ||
72 | + | ||
73 | + | func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator()))) | |
53 | 74 | ||
54 | 75 | ||
55 | 76 | func keyDuckOwner (assetId) = (("duck_" + assetId) + "_owner") | |
56 | 77 | ||
57 | 78 | ||
58 | 79 | func common (nftId,payment,addedCapacity) = { | |
59 | 80 | let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [nftId], nil)) | |
60 | 81 | if ((children == children)) | |
61 | 82 | then { | |
62 | 83 | let eggPayment = value(payment) | |
63 | 84 | let capacity = getDuckCapacity(nftId) | |
64 | 85 | let totalCapacity = (capacity + addedCapacity) | |
65 | 86 | let diff = asInt(invoke(this, "calculateDiffEggs", [capacity, totalCapacity], nil)) | |
66 | 87 | if ((diff == diff)) | |
67 | 88 | then { | |
68 | 89 | let amount = eggPayment.amount | |
69 | 90 | if ((eggPayment.assetId != getEggAssetId())) | |
70 | 91 | then throw(("CBR: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId()))) | |
71 | 92 | else if ((amount != diff)) | |
72 | 93 | then throw(("CBR: Please attach the exact asset amount" + toString(diff))) | |
73 | 94 | else { | |
74 | 95 | let debug = makeString([("oldCapacity=" + toString(capacity)), ("newCapacity=" + toString(totalCapacity)), ("diffCapacity=" + toString(addedCapacity)), ("diffPaid=" + toString(diff))], ";") | |
75 | 96 | [IntegerEntry(duckCapacityKey(nftId), totalCapacity), StringEntry(((duckCapacityKey(nftId) + "_debug_") + toString(height)), debug)] | |
76 | 97 | } | |
77 | 98 | } | |
78 | 99 | else throw("Strict value is not equal to itself.") | |
79 | 100 | } | |
80 | 101 | else throw("Strict value is not equal to itself.") | |
81 | 102 | } | |
82 | 103 | ||
83 | 104 | ||
105 | + | func checkAdditionalPayment (payment) = if (isDefined(payment.assetId)) | |
106 | + | then throw("CCAP: Please attach waves") | |
107 | + | else { | |
108 | + | let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee()) | |
109 | + | if ((payment.amount != feeAmount)) | |
110 | + | then throw((("CCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets")) | |
111 | + | else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)] | |
112 | + | } | |
113 | + | ||
114 | + | ||
84 | 115 | @Callable(i) | |
85 | 116 | func configureOracle (oracle) = if ((i.caller != this)) | |
86 | 117 | then throw("CCO: admin only") | |
87 | - | else [StringEntry( | |
118 | + | else [StringEntry(staticKey_oracleAddress(), oracle)] | |
88 | 119 | ||
89 | 120 | ||
90 | 121 | ||
91 | 122 | @Callable(i) | |
92 | 123 | func calculateTotalPriceEggs (eggs) = { | |
93 | 124 | let powPart = (pow((1000 + increase), increaseDecimals, (eggs + 1), 0, 8, HALFUP) - 100000000) | |
94 | 125 | let price = (((basePrice * powPart) / increase) / 100000) | |
95 | 126 | $Tuple2([IntegerEntry(("PRICE_CALCULATION_POW_" + toString(eggs)), powPart), IntegerEntry(("PRICE_CALCULATION_" + toString(eggs)), price)], price) | |
96 | 127 | } | |
97 | 128 | ||
98 | 129 | ||
99 | 130 | ||
100 | 131 | @Callable(i) | |
101 | 132 | func calculateDiffEggs (oldEggs,newEggs) = { | |
102 | 133 | let alreadyPaid = asInt(invoke(this, "calculateTotalPriceEggs", [oldEggs], nil)) | |
103 | 134 | if ((alreadyPaid == alreadyPaid)) | |
104 | 135 | then { | |
105 | 136 | let totalToPay = asInt(invoke(this, "calculateTotalPriceEggs", [newEggs], nil)) | |
106 | 137 | if ((totalToPay == totalToPay)) | |
107 | 138 | then { | |
108 | 139 | let diff = (totalToPay - alreadyPaid) | |
109 | 140 | let debug = makeString([("oldPaid=" + toString(alreadyPaid)), ("newPaid=" + toString(totalToPay))], ";") | |
110 | 141 | $Tuple2([StringEntry("DEBUG_CALCULATIONS", debug)], diff) | |
111 | 142 | } | |
112 | 143 | else throw("Strict value is not equal to itself.") | |
113 | 144 | } | |
114 | 145 | else throw("Strict value is not equal to itself.") | |
115 | 146 | } | |
116 | 147 | ||
117 | 148 | ||
118 | 149 | ||
119 | 150 | @Callable(i) | |
120 | 151 | func addCapacityToDuck (addedCapacity) = { | |
121 | 152 | let nftPayment = value(i.payments[0]) | |
153 | + | let validPayment = checkAdditionalPayment(i.payments[1]) | |
122 | 154 | let duckAssetId = toBase58String(value(nftPayment.assetId)) | |
123 | 155 | if ((nftPayment.amount != 1)) | |
124 | 156 | then throw("NFT is not attached") | |
125 | - | else (common(duckAssetId, i.payments[1], addedCapacity) ++ [ScriptTransfer(i.caller, 1, value(nftPayment.assetId))]) | |
157 | + | else ((common(duckAssetId, i.payments[1], addedCapacity) ++ [ScriptTransfer(i.caller, 1, value(nftPayment.assetId))]) ++ validPayment) | |
126 | 158 | } | |
127 | 159 | ||
128 | 160 | ||
129 | 161 | ||
130 | 162 | @Callable(i) | |
131 | 163 | func addCapacityToDuckInHunt (nftId,addedCapacity) = { | |
132 | 164 | let ownerInHunt = tryGetStringExternal(getHuntAddress(), keyDuckOwner(nftId)) | |
165 | + | let validPayment = checkAdditionalPayment(i.payments[1]) | |
133 | 166 | if ((ownerInHunt != toString(i.caller))) | |
134 | 167 | then throw("CBR: You can only add capacity to own ducks!") | |
135 | - | else common(nftId, i.payments[0], addedCapacity) | |
168 | + | else (common(nftId, i.payments[0], addedCapacity) ++ validPayment) | |
136 | 169 | } | |
137 | 170 | ||
138 | 171 |
github/deemru/w8io/786bc32 41.20 ms ◑