tx · 4EQCPHoK2j34Ys5CqJ1rdjv3uh1My3WuHx4J1VbDay8H

3N4Zd6WJwSKP9WkkpLnkBV52UwEJpZTiypc:  -0.00300000 Waves

2024.06.02 22:35 [3133492] smart account 3N4Zd6WJwSKP9WkkpLnkBV52UwEJpZTiypc > SELF 0.00000000 Waves

{ "type": 13, "id": "4EQCPHoK2j34Ys5CqJ1rdjv3uh1My3WuHx4J1VbDay8H", "fee": 300000, "feeAssetId": null, "timestamp": 1717356948166, "version": 2, "chainId": 84, "sender": "3N4Zd6WJwSKP9WkkpLnkBV52UwEJpZTiypc", "senderPublicKey": "4gQkoJfjer1FD66sVuv9o3zt6emytB8fNp2y7LSNymjt", "proofs": [ "2RcjJUTXqjdhmPJx21eQtkc4qPnCHkwvy7txawq4TxZSpVhxp4Ru2AUUhwmuqkXBbfsrUHiM815hQsEEiWBdS4o6" ], "script": "base64:BgIPCAISCQoHCAgBAgEBARIACwADU0VQAgJfXwEEam9pbgEFYXJyYXkJALkJAgUFYXJyYXkFA1NFUAEIc2VwYXJhdGUBBnN0cmluZwkAtQkCBQZzdHJpbmcFA1NFUAEOaXNJbml0aWF0ZWRLZXkACQEEam9pbgEJAMwIAgICJXMJAMwIAgILaXNJbml0aWF0ZWQFA25pbAEOYm9uZEFzc2V0SWRLZXkACQEEam9pbgEJAMwIAgICJXMJAMwIAgILYm9uZEFzc2V0SWQFA25pbAEUdW5kZXJseWluZ0Fzc2V0SWRLZXkACQEEam9pbgEJAMwIAgICJXMJAMwIAgIRdW5kZXJseWluZ0Fzc2V0SWQFA25pbAEMbWF4SXNzdWVkS2V5AAkBBGpvaW4BCQDMCAICAiVzCQDMCAICCW1heElzc3VlZAUDbmlsAQxzZWxsUHJpY2VLZXkACQEEam9pbgEJAMwIAgICJXMJAMwIAgIJc2VsbFByaWNlBQNuaWwBCHNldFByaWNlAg5wcmljZU51bWVyYXRvchBwcmljZURlbm9taW5hdG9yCQELU3RyaW5nRW50cnkCCQEMc2VsbFByaWNlS2V5AAkBBGpvaW4BCQDMCAIJAKQDAQUOcHJpY2VOdW1lcmF0b3IJAMwIAgkApAMBBRBwcmljZURlbm9taW5hdG9yBQNuaWwBCGdldFByaWNlAAQEZGF0YQkBCHNlcGFyYXRlAQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBDHNlbGxQcmljZUtleQAJAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGRhdGEAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGRhdGEAAQEUaXNQYXlVbmRlcmx5aW5nQXNzZXQBAWkED3VuZGVybHlpbmdBc3NldAkBEUBleHRyTmF0aXZlKDEwNTcpAQkBFHVuZGVybHlpbmdBc3NldElkS2V5AAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQ91bmRlcmx5aW5nQXNzZXQGCQACAQIVb25seSB1bmRlcmx5aW5nIGFzc2V0CQACAQIOb25seSAxIHBheW1lbnQCAWkBBGluaXQHBXRpdGxlC2Rlc2NyaXB0aW9uCGRlY2ltYWxzEXVuZGVybHlpbmdBc3NldElkDnByaWNlTnVtZXJhdG9yEHByaWNlRGVub21pbmF0b3IJbWF4SXNzdWVkBAVpc3N1ZQkAwggFBQV0aXRsZQULZGVzY3JpcHRpb24AAAUIZGVjaW1hbHMGBAtib25kQXNzZXRJZAkAuAgBBQVpc3N1ZQkAzAgCBQVpc3N1ZQkAzAgCCQELQmluYXJ5RW50cnkCCQEOYm9uZEFzc2V0SWRLZXkABQtib25kQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDG1heElzc3VlZEtleQAFCW1heElzc3VlZAkAzAgCCQEIc2V0UHJpY2UCBQ5wcmljZU51bWVyYXRvcgUQcHJpY2VEZW5vbWluYXRvcgkAzAgCCQELQmluYXJ5RW50cnkCCQEUdW5kZXJseWluZ0Fzc2V0SWRLZXkABRF1bmRlcmx5aW5nQXNzZXRJZAUDbmlsAWkBA2J1eQAEBmNoZWNrcwkAzAgCCQEUaXNQYXlVbmRlcmx5aW5nQXNzZXQBBQFpBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEC2JvbmRBc3NldElkBAckbWF0Y2gwCQChCAEJAQ5ib25kQXNzZXRJZEtleQADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAUBYgMJAAECBQckbWF0Y2gwAgRVbml0CQACAQIWYm9uZEFzc2V0SWQgbm90IHNldHRlZAkAAgECC01hdGNoIGVycm9yBAltYXhJc3N1ZWQEByRtYXRjaDAJAJ8IAQkBDG1heElzc3VlZEtleQADCQABAgUHJG1hdGNoMAIDSW50BAFtBQckbWF0Y2gwBQFtAwkAAQIFByRtYXRjaDACBFVuaXQJAAIBAhRtYXhJc3N1ZWQgbm90IHNldHRlZAkAAgECC01hdGNoIGVycm9yBAskdDAyMjIwMjI3MQkBCGdldFByaWNlAAQOcHJpY2VOdW1lcmF0b3IIBQskdDAyMjIwMjI3MQJfMQQQcHJpY2VEZW5vbWluYXRvcggFCyR0MDIyMjAyMjcxAl8yBA1wYXltZW50QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQNYnV5Qm9uZEFtb3VudAkAawMFDXBheW1lbnRBbW91bnQFEHByaWNlRGVub21pbmF0b3IFDnByaWNlTnVtZXJhdG9yBAt0b3RhbElzc3VlZAQHJG1hdGNoMAkA7AcBBQtib25kQXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQBYQUHJG1hdGNoMAgFAWEIcXVhbnRpdHkDCQABAgUHJG1hdGNoMAIEVW5pdAkAAgECD3dyb25nIGFzc2V0SW5mbwkAAgECC01hdGNoIGVycm9yAwkAZwIFCW1heElzc3VlZAkAZAIFC3RvdGFsSXNzdWVkBQ1idXlCb25kQW1vdW50BAdyZWlzc3VlCQEHUmVpc3N1ZQMFC2JvbmRBc3NldElkBQ1idXlCb25kQW1vdW50BgkAzAgCBQdyZWlzc3VlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUNYnV5Qm9uZEFtb3VudAULYm9uZEFzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQRqb2luAQkAzAgCAgt0b3RhbElzc3VlZAkAzAgCCQDYBAEFC2JvbmRBc3NldElkBQNuaWwJAGQCBQt0b3RhbElzc3VlZAUNYnV5Qm9uZEFtb3VudAUDbmlsCQACAQIYZXhjZWVkcyBtYXhpbXVtIGlzc3VhbmNlCQACAQIVb25seSB1bmRlcmx5aW5nIGFzc2V0AQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleTSlMsc=", "height": 3133492, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let SEP = "__"
5+
6+func join (array) = makeString(array, SEP)
7+
8+
9+func separate (string) = split(string, SEP)
10+
11+
12+func isInitiatedKey () = join(["%s", "isInitiated"])
13+
14+
15+func bondAssetIdKey () = join(["%s", "bondAssetId"])
16+
17+
18+func underlyingAssetIdKey () = join(["%s", "underlyingAssetId"])
19+
20+
21+func maxIssuedKey () = join(["%s", "maxIssued"])
22+
23+
24+func sellPriceKey () = join(["%s", "sellPrice"])
25+
26+
27+func setPrice (priceNumerator,priceDenominator) = StringEntry(sellPriceKey(), join([toString(priceNumerator), toString(priceDenominator)]))
28+
29+
30+func getPrice () = {
31+ let data = separate(getStringValue(sellPriceKey()))
32+ $Tuple2(parseIntValue(data[0]), parseIntValue(data[1]))
33+ }
34+
35+
36+func isPayUnderlyingAsset (i) = {
37+ let underlyingAsset = getBinaryValue(underlyingAssetIdKey())
38+ if ((size(i.payments) == 1))
39+ then if ((i.payments[0].assetId == underlyingAsset))
40+ then true
41+ else throw("only underlying asset")
42+ else throw("only 1 payment")
43+ }
44+
45+
46+@Callable(i)
47+func init (title,description,decimals,underlyingAssetId,priceNumerator,priceDenominator,maxIssued) = {
48+ let issue = Issue(title, description, 0, decimals, true)
49+ let bondAssetId = calculateAssetId(issue)
50+[issue, BinaryEntry(bondAssetIdKey(), bondAssetId), IntegerEntry(maxIssuedKey(), maxIssued), setPrice(priceNumerator, priceDenominator), BinaryEntry(underlyingAssetIdKey(), underlyingAssetId)]
51+ }
52+
53+
54+
55+@Callable(i)
56+func buy () = {
57+ let checks = [isPayUnderlyingAsset(i)]
58+ if ((checks == checks))
59+ then {
60+ let bondAssetId = match getBinary(bondAssetIdKey()) {
61+ case b: ByteVector =>
62+ b
63+ case _: Unit =>
64+ throw("bondAssetId not setted")
65+ case _ =>
66+ throw("Match error")
67+ }
68+ let maxIssued = match getInteger(maxIssuedKey()) {
69+ case m: Int =>
70+ m
71+ case _: Unit =>
72+ throw("maxIssued not setted")
73+ case _ =>
74+ throw("Match error")
75+ }
76+ let $t022202271 = getPrice()
77+ let priceNumerator = $t022202271._1
78+ let priceDenominator = $t022202271._2
79+ let paymentAmount = i.payments[0].amount
80+ let buyBondAmount = fraction(paymentAmount, priceDenominator, priceNumerator)
81+ let totalIssued = match assetInfo(bondAssetId) {
82+ case a: Asset =>
83+ a.quantity
84+ case _: Unit =>
85+ throw("wrong assetInfo")
86+ case _ =>
87+ throw("Match error")
88+ }
89+ if ((maxIssued >= (totalIssued + buyBondAmount)))
90+ then {
91+ let reissue = Reissue(bondAssetId, buyBondAmount, true)
92+[reissue, ScriptTransfer(i.caller, buyBondAmount, bondAssetId), IntegerEntry(join(["totalIssued", toBase58String(bondAssetId)]), (totalIssued + buyBondAmount))]
93+ }
94+ else throw("exceeds maximum issuance")
95+ }
96+ else throw("only underlying asset")
97+ }
98+
99+
100+@Verifier(tx)
101+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
102+

github/deemru/w8io/169f3d6 
13.02 ms