tx · 8JWgkgjTarR7sDTBVBuVWKQacawNLwWL3bJQoNFfpj3w

3P8prjYwq9dxRqPiyYAjQpAnuei6eTAerSV:  -0.01000000 Waves

2022.10.15 11:16 [3338665] smart account 3P8prjYwq9dxRqPiyYAjQpAnuei6eTAerSV > SELF 0.00000000 Waves

{ "type": 13, "id": "8JWgkgjTarR7sDTBVBuVWKQacawNLwWL3bJQoNFfpj3w", "fee": 1000000, "feeAssetId": null, "timestamp": 1665821790497, "version": 2, "chainId": 87, "sender": "3P8prjYwq9dxRqPiyYAjQpAnuei6eTAerSV", "senderPublicKey": "AMyLj8njybNRT5DAz3WKHgzDpgXocT1ojBUcFthRiH6i", "proofs": [ "2psqvraG4Gk7ofPm7cDEGsKrXX1tTt5iQkhffoiKthfdKKYXKFPBaR7VauoeFXmDRNN9RqMzccfpX3kRS1nHBaHH" ], "script": "base64:BgIXCAISAwoBCBIDCgEBEgQKAgEBEgMKAQEMAAliYXNlUHJpY2UAgIl6AAhpbmNyZWFzZQABABBpbmNyZWFzZURlY2ltYWxzAAMBD2R1Y2tDYXBhY2l0eUtleQEGZHVja0lkCQCsAgICD2FkZGVkX2NhcGFjaXR5XwUGZHVja0lkARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQx0cnlHZXRTdHJpbmcBA2tleQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgUEdGhpcwUDa2V5AQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAhl3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50AQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwECFHN0YXRpY19vcmFjbGVBZGRyZXNzAQ1nZXRFZ2dBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIRc3RhdGljX2VnZ0Fzc2V0SWQBD2dldER1Y2tDYXBhY2l0eQEGZHVja0lkCQENdHJ5R2V0SW50ZWdlcgEJAQ9kdWNrQ2FwYWNpdHlLZXkBBQZkdWNrSWQBEWdldEJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhVzdGF0aWNfYnJlZWRlckFkZHJlc3MEAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIPQ0NPOiBhZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19vcmFjbGVBZGRyZXNzBQZvcmFjbGUFA25pbAFpARdjYWxjdWxhdGVUb3RhbFByaWNlRWdncwEEZWdncwQHcG93UGFydAkAZQIJAGwGCQBkAgDoBwUIaW5jcmVhc2UFEGluY3JlYXNlRGVjaW1hbHMJAGQCBQRlZ2dzAAEAAAAIBQZIQUxGVVAAgMLXLwQFcHJpY2UJAGkCCQBpAgkAaAIFCWJhc2VQcmljZQUHcG93UGFydAUIaW5jcmVhc2UAoI0GCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIWUFJJQ0VfQ0FMQ1VMQVRJT05fUE9XXwkApAMBBQRlZ2dzBQdwb3dQYXJ0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICElBSSUNFX0NBTENVTEFUSU9OXwkApAMBBQRlZ2dzBQVwcmljZQUDbmlsBQVwcmljZQFpARFjYWxjdWxhdGVEaWZmRWdncwIHb2xkRWdncwduZXdFZ2dzBAthbHJlYWR5UGFpZAkBBWFzSW50AQkA/AcEBQR0aGlzAhdjYWxjdWxhdGVUb3RhbFByaWNlRWdncwkAzAgCBQdvbGRFZ2dzBQNuaWwFA25pbAMJAAACBQthbHJlYWR5UGFpZAULYWxyZWFkeVBhaWQECnRvdGFsVG9QYXkJAQVhc0ludAEJAPwHBAUEdGhpcwIXY2FsY3VsYXRlVG90YWxQcmljZUVnZ3MJAMwIAgUHbmV3RWdncwUDbmlsBQNuaWwDCQAAAgUKdG90YWxUb1BheQUKdG90YWxUb1BheQQEZGlmZgkAZQIFCnRvdGFsVG9QYXkFC2FscmVhZHlQYWlkBAVkZWJ1ZwkAuQkCCQDMCAIJAKwCAgIIb2xkUGFpZD0JAKQDAQULYWxyZWFkeVBhaWQJAMwIAgkArAICAghuZXdQYWlkPQkApAMBBQp0b3RhbFRvUGF5BQNuaWwCATsJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCAhJERUJVR19DQUxDVUxBVElPTlMFBWRlYnVnBQNuaWwFBGRpZmYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERYWRkQ2FwYWNpdHlUb0R1Y2sBDWFkZGVkQ2FwYWNpdHkEDGZpcnN0UGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABA1zZWNvbmRQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAEEC2R1Y2tBc3NldElkCQDYBAEJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAQIY2hpbGRyZW4JAQVhc0ludAEJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIWdmFsaWRhdGVBbmRHZXRDaGlsZHJlbgkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUIY2hpbGRyZW4FCGNoaWxkcmVuAwkBAiE9AggFDGZpcnN0UGF5bWVudAZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQECGNhcGFjaXR5CQEPZ2V0RHVja0NhcGFjaXR5AQULZHVja0Fzc2V0SWQEDXRvdGFsQ2FwYWNpdHkJAGQCBQhjYXBhY2l0eQUNYWRkZWRDYXBhY2l0eQQEZGlmZgkBBWFzSW50AQkA/AcEBQR0aGlzAhFjYWxjdWxhdGVEaWZmRWdncwkAzAgCBQhjYXBhY2l0eQkAzAgCBQ10b3RhbENhcGFjaXR5BQNuaWwFA25pbAMJAAACBQRkaWZmBQRkaWZmBAZhbW91bnQIBQ1zZWNvbmRQYXltZW50BmFtb3VudAMJAQIhPQIIBQ1zZWNvbmRQYXltZW50B2Fzc2V0SWQJAQ1nZXRFZ2dBc3NldElkAAkAAgEJAKwCAgJBQ0JSOiBZb3UgY2FuIGF0dGFjaCBvbmx5IEVHRyB0b2tlbnMgd2l0aCB0aGUgZm9sbG93aW5nIGFzc2V0IGlkOiAJANgEAQkBDWdldEVnZ0Fzc2V0SWQAAwkBAiE9AgUGYW1vdW50BQRkaWZmCQACAQkArAICAilDQlI6IFBsZWFzZSBhdHRhY2ggdGhlIGV4YWN0IGFzc2V0IGFtb3VudAkApAMBBQRkaWZmBAVkZWJ1ZwkAuQkCCQDMCAIJAKwCAgIMb2xkQ2FwYWNpdHk9CQCkAwEFCGNhcGFjaXR5CQDMCAIJAKwCAgIMbmV3Q2FwYWNpdHk9CQCkAwEFDXRvdGFsQ2FwYWNpdHkJAMwIAgkArAICAg1kaWZmQ2FwYWNpdHk9CQCkAwEFDWFkZGVkQ2FwYWNpdHkJAMwIAgkArAICAglkaWZmUGFpZD0JAKQDAQUEZGlmZgUDbmlsAgE7CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPZHVja0NhcGFjaXR5S2V5AQULZHVja0Fzc2V0SWQFDXRvdGFsQ2FwYWNpdHkJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAQ9kdWNrQ2FwYWNpdHlLZXkBBQtkdWNrQXNzZXRJZAIHX2RlYnVnXwkApAMBBQZoZWlnaHQFBWRlYnVnBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AVYxA1g==", "height": 3338665, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6G42vE9cxv8fDcpVx1H1yWnsueiQTL6G3v9ginVNiitu Next: 5yHQVx4KkxoPVhqj33Q7F7Bb4XqyUsSkTkaZCoaCgkgH Diff:
OldNewDifferences
77
88 let increaseDecimals = 3
99
10+func duckCapacityKey (duckId) = ("added_capacity_" + duckId)
11+
12+
13+func tryGetStringExternal (address,key) = match getString(address, key) {
14+ case a: String =>
15+ a
16+ case _ =>
17+ ""
18+}
19+
20+
21+func tryGetString (key) = tryGetStringExternal(this, key)
22+
23+
24+func tryGetInteger (key) = match getInteger(this, key) {
25+ case b: Int =>
26+ b
27+ case _ =>
28+ 0
29+}
30+
31+
32+func asInt (value) = match value {
33+ case int: Int =>
34+ int
35+ case _ =>
36+ throw("wrong type, expected: Int")
37+}
38+
39+
40+func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
41+
42+
43+func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
44+
45+
46+func getDuckCapacity (duckId) = tryGetInteger(duckCapacityKey(duckId))
47+
48+
49+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
50+
51+
52+@Callable(i)
53+func configureOracle (oracle) = if ((i.caller != this))
54+ then throw("CCO: admin only")
55+ else [StringEntry("static_oracleAddress", oracle)]
56+
57+
58+
1059 @Callable(i)
1160 func calculateTotalPriceEggs (eggs) = {
1261 let powPart = (pow((1000 + increase), increaseDecimals, (eggs + 1), 0, 8, HALFUP) - 100000000)
1362 let price = (((basePrice * powPart) / increase) / 100000)
14- $Tuple2([IntegerEntry(("PRICE_CALCULATION_POW" + toString(eggs)), powPart), IntegerEntry(("PRICE_CALCULATION_" + toString(eggs)), price)], price)
63+ $Tuple2([IntegerEntry(("PRICE_CALCULATION_POW_" + toString(eggs)), powPart), IntegerEntry(("PRICE_CALCULATION_" + toString(eggs)), price)], price)
64+ }
65+
66+
67+
68+@Callable(i)
69+func calculateDiffEggs (oldEggs,newEggs) = {
70+ let alreadyPaid = asInt(invoke(this, "calculateTotalPriceEggs", [oldEggs], nil))
71+ if ((alreadyPaid == alreadyPaid))
72+ then {
73+ let totalToPay = asInt(invoke(this, "calculateTotalPriceEggs", [newEggs], nil))
74+ if ((totalToPay == totalToPay))
75+ then {
76+ let diff = (totalToPay - alreadyPaid)
77+ let debug = makeString([("oldPaid=" + toString(alreadyPaid)), ("newPaid=" + toString(totalToPay))], ";")
78+ $Tuple2([StringEntry("DEBUG_CALCULATIONS", debug)], diff)
79+ }
80+ else throw("Strict value is not equal to itself.")
81+ }
82+ else throw("Strict value is not equal to itself.")
83+ }
84+
85+
86+
87+@Callable(i)
88+func addCapacityToDuck (addedCapacity) = {
89+ let firstPayment = value(i.payments[0])
90+ let secondPayment = value(i.payments[1])
91+ let duckAssetId = toBase58String(value(firstPayment.assetId))
92+ let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckAssetId], nil))
93+ if ((children == children))
94+ then if ((firstPayment.amount != 1))
95+ then throw("NFT is not attached")
96+ else {
97+ let capacity = getDuckCapacity(duckAssetId)
98+ let totalCapacity = (capacity + addedCapacity)
99+ let diff = asInt(invoke(this, "calculateDiffEggs", [capacity, totalCapacity], nil))
100+ if ((diff == diff))
101+ then {
102+ let amount = secondPayment.amount
103+ if ((secondPayment.assetId != getEggAssetId()))
104+ then throw(("CBR: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
105+ else if ((amount != diff))
106+ then throw(("CBR: Please attach the exact asset amount" + toString(diff)))
107+ else {
108+ let debug = makeString([("oldCapacity=" + toString(capacity)), ("newCapacity=" + toString(totalCapacity)), ("diffCapacity=" + toString(addedCapacity)), ("diffPaid=" + toString(diff))], ";")
109+[IntegerEntry(duckCapacityKey(duckAssetId), totalCapacity), StringEntry(((duckCapacityKey(duckAssetId) + "_debug_") + toString(height)), debug)]
110+ }
111+ }
112+ else throw("Strict value is not equal to itself.")
113+ }
114+ else throw("Strict value is not equal to itself.")
15115 }
16116
17117
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let basePrice = 2000000
55
66 let increase = 1
77
88 let increaseDecimals = 3
99
10+func duckCapacityKey (duckId) = ("added_capacity_" + duckId)
11+
12+
13+func tryGetStringExternal (address,key) = match getString(address, key) {
14+ case a: String =>
15+ a
16+ case _ =>
17+ ""
18+}
19+
20+
21+func tryGetString (key) = tryGetStringExternal(this, key)
22+
23+
24+func tryGetInteger (key) = match getInteger(this, key) {
25+ case b: Int =>
26+ b
27+ case _ =>
28+ 0
29+}
30+
31+
32+func asInt (value) = match value {
33+ case int: Int =>
34+ int
35+ case _ =>
36+ throw("wrong type, expected: Int")
37+}
38+
39+
40+func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
41+
42+
43+func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
44+
45+
46+func getDuckCapacity (duckId) = tryGetInteger(duckCapacityKey(duckId))
47+
48+
49+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
50+
51+
52+@Callable(i)
53+func configureOracle (oracle) = if ((i.caller != this))
54+ then throw("CCO: admin only")
55+ else [StringEntry("static_oracleAddress", oracle)]
56+
57+
58+
1059 @Callable(i)
1160 func calculateTotalPriceEggs (eggs) = {
1261 let powPart = (pow((1000 + increase), increaseDecimals, (eggs + 1), 0, 8, HALFUP) - 100000000)
1362 let price = (((basePrice * powPart) / increase) / 100000)
14- $Tuple2([IntegerEntry(("PRICE_CALCULATION_POW" + toString(eggs)), powPart), IntegerEntry(("PRICE_CALCULATION_" + toString(eggs)), price)], price)
63+ $Tuple2([IntegerEntry(("PRICE_CALCULATION_POW_" + toString(eggs)), powPart), IntegerEntry(("PRICE_CALCULATION_" + toString(eggs)), price)], price)
64+ }
65+
66+
67+
68+@Callable(i)
69+func calculateDiffEggs (oldEggs,newEggs) = {
70+ let alreadyPaid = asInt(invoke(this, "calculateTotalPriceEggs", [oldEggs], nil))
71+ if ((alreadyPaid == alreadyPaid))
72+ then {
73+ let totalToPay = asInt(invoke(this, "calculateTotalPriceEggs", [newEggs], nil))
74+ if ((totalToPay == totalToPay))
75+ then {
76+ let diff = (totalToPay - alreadyPaid)
77+ let debug = makeString([("oldPaid=" + toString(alreadyPaid)), ("newPaid=" + toString(totalToPay))], ";")
78+ $Tuple2([StringEntry("DEBUG_CALCULATIONS", debug)], diff)
79+ }
80+ else throw("Strict value is not equal to itself.")
81+ }
82+ else throw("Strict value is not equal to itself.")
83+ }
84+
85+
86+
87+@Callable(i)
88+func addCapacityToDuck (addedCapacity) = {
89+ let firstPayment = value(i.payments[0])
90+ let secondPayment = value(i.payments[1])
91+ let duckAssetId = toBase58String(value(firstPayment.assetId))
92+ let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckAssetId], nil))
93+ if ((children == children))
94+ then if ((firstPayment.amount != 1))
95+ then throw("NFT is not attached")
96+ else {
97+ let capacity = getDuckCapacity(duckAssetId)
98+ let totalCapacity = (capacity + addedCapacity)
99+ let diff = asInt(invoke(this, "calculateDiffEggs", [capacity, totalCapacity], nil))
100+ if ((diff == diff))
101+ then {
102+ let amount = secondPayment.amount
103+ if ((secondPayment.assetId != getEggAssetId()))
104+ then throw(("CBR: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
105+ else if ((amount != diff))
106+ then throw(("CBR: Please attach the exact asset amount" + toString(diff)))
107+ else {
108+ let debug = makeString([("oldCapacity=" + toString(capacity)), ("newCapacity=" + toString(totalCapacity)), ("diffCapacity=" + toString(addedCapacity)), ("diffPaid=" + toString(diff))], ";")
109+[IntegerEntry(duckCapacityKey(duckAssetId), totalCapacity), StringEntry(((duckCapacityKey(duckAssetId) + "_debug_") + toString(height)), debug)]
110+ }
111+ }
112+ else throw("Strict value is not equal to itself.")
113+ }
114+ else throw("Strict value is not equal to itself.")
15115 }
16116
17117

github/deemru/w8io/3ef1775 
29.87 ms