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:
Old | New | Differences | |
---|---|---|---|
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 15.49 ms ◑![]()