tx · DQEGrEG5R9r29dD9U5q1k4NWuVUQDbBnLZvaTgUaXsAw

3P8ScM8vDYv3YK1QhFMbF4LsbZTRSowSQLx:  -0.01000000 Waves

2023.01.04 01:41 [3454868] smart account 3P8ScM8vDYv3YK1QhFMbF4LsbZTRSowSQLx > SELF 0.00000000 Waves

{ "type": 13, "id": "DQEGrEG5R9r29dD9U5q1k4NWuVUQDbBnLZvaTgUaXsAw", "fee": 1000000, "feeAssetId": null, "timestamp": 1672785725824, "version": 1, "sender": "3P8ScM8vDYv3YK1QhFMbF4LsbZTRSowSQLx", "senderPublicKey": "ERKkYKnafViKTn8uQkz9XhvosihQ5XyXkRCm2ztrjZey", "proofs": [ "3pp546pWRNayCB2pKPAKki4kARzSdhJvN3fh2GiPDvyhVxTizPHBSKmJPAQGk4eTEEustLGJjsC4Dx5Z1dDH9uTN" ], "script": "base64:BgIICAISABIAEgAOAA9wcmljZU9yYWNsZUFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQNUJmZDU4UFBmTnZCTTJIeThRZmJjRHFNZU50emc3S2ZQAA9jb2xsYXRlcmFsTGltaXQJAGgCAICt4gQAgMLXLwALb3JhY2xlSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ9wcmljZU9yYWNsZUFkZHICC3ByaWNlX2luZGV4AhRFcnJvcjogTm8gcHJpY2UgZGF0YQAQb3JhY2xlSW5kZXhCbG9jawkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFD3ByaWNlT3JhY2xlQWRkcgkArAICAgxwcmljZV9pbmRleF8JAKQDAQULb3JhY2xlSW5kZXgCFEVycm9yOiBObyBwcmljZSBkYXRhABNvcmFjbGVXYXZlc1ByaWNlVVNECQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgICBnByaWNlXwkApAMBBRBvcmFjbGVJbmRleEJsb2NrAhRFcnJvcjogTm8gcHJpY2UgZGF0YQAHdG9rZW5JZAkAoQgBAgd0b2tlbklkARBnZXRUb2tlblF1YW50aXR5AAQHJG1hdGNoMAkA7AcBCQETdmFsdWVPckVycm9yTWVzc2FnZQIFB3Rva2VuSWQCEUVycm9yOiBObyB0b2tlbklkAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CHF1YW50aXR5CQACAQISQ2FuIG5vdCBmaW5kIHRva2VuAQ1nZXRDb2xsYXRlcmFsAAgJAO8HAQUEdGhpcwdyZWd1bGFyARJnZXRDb2xsYXRlcmFsSW5VU0QACQBrAwgJAO8HAQUEdGhpcwdyZWd1bGFyBRNvcmFjbGVXYXZlc1ByaWNlVVNEAMCEPQEPZ2V0QmFja2luZ1JhdGlvAAkAawMJARJnZXRDb2xsYXRlcmFsSW5VU0QAAJBOCQEQZ2V0VG9rZW5RdWFudGl0eQABEGdldEhpc3RvcmljUHJpY2UBCGRheXNfYWdvBBloaXN0b3JpY19vcmFjbGVJbmRleEJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgICDHByaWNlX2luZGV4XwkApAMBCQBlAgULb3JhY2xlSW5kZXgJAGgCBQhkYXlzX2FnbwCgCwIdRXJyb3I6IE5vIGhpc3RvcmljIHByaWNlIGRhdGEEHGhpc3RvcmljX29yYWNsZVdhdmVzUHJpY2VVU0QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgIGcHJpY2VfCQCkAwEFEG9yYWNsZUluZGV4QmxvY2sCHUVycm9yOiBObyBoaXN0b3JpYyBwcmljZSBkYXRhBRxoaXN0b3JpY19vcmFjbGVXYXZlc1ByaWNlVVNEARVnZXRIaXN0b3JpY1ByaW50TGltaXQBCGRheXNfYWdvBBxoaXN0b3JpY19vcmFjbGVXYXZlc1ByaWNlVVNECQEQZ2V0SGlzdG9yaWNQcmljZQEFCGRheXNfYWdvBAloYWxmUHJpY2UJAGsDBRxoaXN0b3JpY19vcmFjbGVXYXZlc1ByaWNlVVNEAAEAAgMJAGYCBQloYWxmUHJpY2UJARBnZXRIaXN0b3JpY1ByaWNlAQkAZAIABwUIZGF5c19hZ28AAAMJAGYCBQloYWxmUHJpY2UJARBnZXRIaXN0b3JpY1ByaWNlAQkAZAIADgUIZGF5c19hZ28AAAMJAGYCBQloYWxmUHJpY2UJARBnZXRIaXN0b3JpY1ByaWNlAQkAZAIAHgUIZGF5c19hZ28AAAkAaAIAoI0GAIDC1y8BFGdldEN1cnJlbnRQcmludExpbWl0AAQJaGFsZlByaWNlCQBrAwUTb3JhY2xlV2F2ZXNQcmljZVVTRAABAAIDCQBmAgUJaGFsZlByaWNlCQEQZ2V0SGlzdG9yaWNQcmljZQEABwAAAwkAZgIFCWhhbGZQcmljZQkBEGdldEhpc3RvcmljUHJpY2UBAA4AAAMJAGYCBQloYWxmUHJpY2UJARBnZXRIaXN0b3JpY1ByaWNlAQAeAAAJAGgCAKCNBgCAwtcvARRnZXRUb3RhbFByaW50ZWRUb2RheQAEA2tleQkArAICAhN0b3RhbF9wcmludGVkX3RvZGF5CQCkAwEJAG4EBQZoZWlnaHQAoAsAAQUERE9XTgMJAAACCQCfCAEFA2tleQUEdW5pdAAACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUDa2V5AgNlcnIDAWkBC2NvbnN0cnVjdG9yAAMJAQIhPQIFB3Rva2VuSWQFBHVuaXQJAAIBAipFcnJvcjogQ29uc3RydWN0b3IgYWxyZWFkeSBoYXMgYmVlbiBjYWxsZWQEBWlzc3VlCQDCCAUCBFRlc3QCBFRlc3QAAAAIBgQCaWQJALgIAQUFaXNzdWUJAJQKAgkAzAgCBQVpc3N1ZQkAzAgCCQELQmluYXJ5RW50cnkCAgd0b2tlbklkBQJpZAUDbmlsBQR1bml0AWkBD3N3YXBXYXZlc1RvVGVzdAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiNFcnJvcjogT25seSBvbmUgcGF5bWVudCBpcyByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkCQACAQIvRXJyb3I6IE9ubHkgV2F2ZXMgdG9rZW4gaXMgYWxsb3dlZCBmb3Igc3dhcHBpbmcDCQBmAgkAZAIICQDvBwEFBHRoaXMHcmVndWxhcggFA3BtdAZhbW91bnQFD2NvbGxhdGVyYWxMaW1pdAkAAgECIEVycm9yOiBDb2xsYXRlcmFsIGxpbWl0IGV4Y2VlZGVkBBBhbW91bnRXaXRob3V0RmVlCQBrAwgFA3BtdAZhbW91bnQFE29yYWNsZVdhdmVzUHJpY2VVU0QAwIQ9BAxyZXR1cm5BbW91bnQJAGsDBRBhbW91bnRXaXRob3V0RmVlAOMHAOgHAwkAZgIJAGQCCQEUZ2V0VG90YWxQcmludGVkVG9kYXkABQxyZXR1cm5BbW91bnQJARRnZXRDdXJyZW50UHJpbnRMaW1pdAAJAAIBAiBFcnJvcjogRGFpbHkgc3dhcCBsaW1pdCBleGNlZWRlZAkAzAgCCQEHUmVpc3N1ZQMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUHdG9rZW5JZAISRXJyb3I6IG5vIHRva2VuIGlkBQxyZXR1cm5BbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMcmV0dXJuQW1vdW50BQd0b2tlbklkBQNuaWwBaQEPc3dhcFRlc3RUb1dhdmVzAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECI0Vycm9yOiBPbmx5IG9uZSBwYXltZW50IGlzIHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAUHdG9rZW5JZAkAAgECLkVycm9yOiBPbmx5IFRlc3QgdG9rZW4gaXMgYWxsb3dlZCBmb3Igc3dhcHBpbmcEEGFtb3VudFdpdGhvdXRGZWUJAGsDCAUDcG10BmFtb3VudADAhD0FE29yYWNsZVdhdmVzUHJpY2VVU0QEAmJyCQEPZ2V0QmFja2luZ1JhdGlvAAQFc2hhcmUDCQBmAgCsTQUCYnIJAGUCAOgHCQBpAgkAZQIAkE4FAmJyAAsDCQBmAgCEUgUCYnIA3wcA4wcEDHJldHVybkFtb3VudAkAawMFEGFtb3VudFdpdGhvdXRGZWUFBXNoYXJlAOgHCQDMCAIJAQRCdXJuAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQd0b2tlbklkAhJFcnJvcjogbm8gdG9rZW4gaWQIBQNwbXQGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMcmV0dXJuQW1vdW50BQR1bml0BQNuaWwA8tmVBw==", "chainId": 87, "height": 3454868, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: APw1heca28X7GdCboGNKfYWysp2hXnXPUpXZKF8URjDE Next: GM4QHE6DT4YP3Ko6BTQW855QKtoGhVQYfxdNBDouMM3S Diff:
OldNewDifferences
3838
3939
4040 func getHistoricPrintLimit (days_ago) = {
41- let historic_oracleWavesPriceUSD = valueOrErrorMessage(getInteger(priceOracleAddr, ("price_" + toString((oracleIndexBlock - (days_ago * 1440))))), "Error: No price data")
42- historic_oracleWavesPriceUSD
41+ let historic_oracleWavesPriceUSD = getHistoricPrice(days_ago)
42+ let halfPrice = fraction(historic_oracleWavesPriceUSD, 1, 2)
43+ if ((halfPrice > getHistoricPrice((7 + days_ago))))
44+ then 0
45+ else if ((halfPrice > getHistoricPrice((14 + days_ago))))
46+ then 0
47+ else if ((halfPrice > getHistoricPrice((30 + days_ago))))
48+ then 0
49+ else (100000 * 100000000)
4350 }
4451
4552
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let priceOracleAddr = addressFromStringValue("3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP")
55
66 let collateralLimit = (10000000 * 100000000)
77
88 let oracleIndex = valueOrErrorMessage(getInteger(priceOracleAddr, "price_index"), "Error: No price data")
99
1010 let oracleIndexBlock = valueOrErrorMessage(getInteger(priceOracleAddr, ("price_index_" + toString(oracleIndex))), "Error: No price data")
1111
1212 let oracleWavesPriceUSD = valueOrErrorMessage(getInteger(priceOracleAddr, ("price_" + toString(oracleIndexBlock))), "Error: No price data")
1313
1414 let tokenId = getBinary("tokenId")
1515
1616 func getTokenQuantity () = match assetInfo(valueOrErrorMessage(tokenId, "Error: No tokenId")) {
1717 case asset: Asset =>
1818 asset.quantity
1919 case _ =>
2020 throw("Can not find token")
2121 }
2222
2323
2424 func getCollateral () = wavesBalance(this).regular
2525
2626
2727 func getCollateralInUSD () = fraction(wavesBalance(this).regular, oracleWavesPriceUSD, 1000000)
2828
2929
3030 func getBackingRatio () = fraction(getCollateralInUSD(), 10000, getTokenQuantity())
3131
3232
3333 func getHistoricPrice (days_ago) = {
3434 let historic_oracleIndexBlock = valueOrErrorMessage(getInteger(priceOracleAddr, ("price_index_" + toString((oracleIndex - (days_ago * 1440))))), "Error: No historic price data")
3535 let historic_oracleWavesPriceUSD = valueOrErrorMessage(getInteger(priceOracleAddr, ("price_" + toString(oracleIndexBlock))), "Error: No historic price data")
3636 historic_oracleWavesPriceUSD
3737 }
3838
3939
4040 func getHistoricPrintLimit (days_ago) = {
41- let historic_oracleWavesPriceUSD = valueOrErrorMessage(getInteger(priceOracleAddr, ("price_" + toString((oracleIndexBlock - (days_ago * 1440))))), "Error: No price data")
42- historic_oracleWavesPriceUSD
41+ let historic_oracleWavesPriceUSD = getHistoricPrice(days_ago)
42+ let halfPrice = fraction(historic_oracleWavesPriceUSD, 1, 2)
43+ if ((halfPrice > getHistoricPrice((7 + days_ago))))
44+ then 0
45+ else if ((halfPrice > getHistoricPrice((14 + days_ago))))
46+ then 0
47+ else if ((halfPrice > getHistoricPrice((30 + days_ago))))
48+ then 0
49+ else (100000 * 100000000)
4350 }
4451
4552
4653 func getCurrentPrintLimit () = {
4754 let halfPrice = fraction(oracleWavesPriceUSD, 1, 2)
4855 if ((halfPrice > getHistoricPrice(7)))
4956 then 0
5057 else if ((halfPrice > getHistoricPrice(14)))
5158 then 0
5259 else if ((halfPrice > getHistoricPrice(30)))
5360 then 0
5461 else (100000 * 100000000)
5562 }
5663
5764
5865 func getTotalPrintedToday () = {
5966 let key = ("total_printed_today" + toString(fraction(height, 1440, 1, DOWN)))
6067 if ((getInteger(key) == unit))
6168 then 0
6269 else valueOrErrorMessage(getInteger(key), "err")
6370 }
6471
6572
6673 @Callable(i)
6774 func constructor () = if ((tokenId != unit))
6875 then throw("Error: Constructor already has been called")
6976 else {
7077 let issue = Issue("Test", "Test", 0, 8, true)
7178 let id = calculateAssetId(issue)
7279 $Tuple2([issue, BinaryEntry("tokenId", id)], unit)
7380 }
7481
7582
7683
7784 @Callable(i)
7885 func swapWavesToTest () = if ((size(i.payments) != 1))
7986 then throw("Error: Only one payment is required")
8087 else {
8188 let pmt = value(i.payments[0])
8289 if (isDefined(pmt.assetId))
8390 then throw("Error: Only Waves token is allowed for swapping")
8491 else if (((wavesBalance(this).regular + pmt.amount) > collateralLimit))
8592 then throw("Error: Collateral limit exceeded")
8693 else {
8794 let amountWithoutFee = fraction(pmt.amount, oracleWavesPriceUSD, 1000000)
8895 let returnAmount = fraction(amountWithoutFee, 995, 1000)
8996 if (((getTotalPrintedToday() + returnAmount) > getCurrentPrintLimit()))
9097 then throw("Error: Daily swap limit exceeded")
9198 else [Reissue(valueOrErrorMessage(tokenId, "Error: no token id"), returnAmount, true), ScriptTransfer(i.caller, returnAmount, tokenId)]
9299 }
93100 }
94101
95102
96103
97104 @Callable(i)
98105 func swapTestToWaves () = if ((size(i.payments) != 1))
99106 then throw("Error: Only one payment is required")
100107 else {
101108 let pmt = value(i.payments[0])
102109 if ((pmt.assetId != tokenId))
103110 then throw("Error: Only Test token is allowed for swapping")
104111 else {
105112 let amountWithoutFee = fraction(pmt.amount, 1000000, oracleWavesPriceUSD)
106113 let br = getBackingRatio()
107114 let share = if ((9900 > br))
108115 then (1000 - ((10000 - br) / 11))
109116 else if ((10500 > br))
110117 then 991
111118 else 995
112119 let returnAmount = fraction(amountWithoutFee, share, 1000)
113120 [Burn(valueOrErrorMessage(tokenId, "Error: no token id"), pmt.amount), ScriptTransfer(i.caller, returnAmount, unit)]
114121 }
115122 }
116123
117124

github/deemru/w8io/6500d08 
32.75 ms